summaryrefslogtreecommitdiffstats
path: root/yamdrv
diff options
context:
space:
mode:
Diffstat (limited to 'yamdrv')
-rw-r--r--yamdrv/Makefile.am16
-rw-r--r--yamdrv/Makefile.in323
-rw-r--r--yamdrv/README.yamdrv92
-rw-r--r--yamdrv/mcs2h.c106
-rw-r--r--yamdrv/yam.h82
-rwxr-xr-xyamdrv/yam08-2.0.36-patch.diff2180
-rw-r--r--yamdrv/yam08-2.2.1-patch.diff2172
-rw-r--r--yamdrv/yamcfg.c351
8 files changed, 5322 insertions, 0 deletions
diff --git a/yamdrv/Makefile.am b/yamdrv/Makefile.am
new file mode 100644
index 0000000..b8f6a21
--- /dev/null
+++ b/yamdrv/Makefile.am
@@ -0,0 +1,16 @@
+
+sbin_PROGRAMS = yamcfg mcs2h
+
+yamcfg_SOURCES = yamcfg.c yam.h
+
+mcs2h_SOURCES = mcs2h.c
+
+docdir=${prefix}/doc/ax25-tools
+doc_DATA = README.yamdrv \
+ yam08-2.0.36-patch.diff \
+ yam08-2.2.1-patch.diff
+
+EXTRA_DIST = $(doc_DATA)
+
+installconf:
+
diff --git a/yamdrv/Makefile.in b/yamdrv/Makefile.in
new file mode 100644
index 0000000..84c0512
--- /dev/null
+++ b/yamdrv/Makefile.in
@@ -0,0 +1,323 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 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.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+AWK = @AWK@
+AX25IO_LIB = @AX25IO_LIB@
+AX25_LIB = @AX25_LIB@
+CC = @CC@
+MAKEINFO = @MAKEINFO@
+NCURSES_LIB = @NCURSES_LIB@
+PACKAGE = @PACKAGE@
+UTIL_LIB = @UTIL_LIB@
+VERSION = @VERSION@
+Z_LIB = @Z_LIB@
+
+sbin_PROGRAMS = yamcfg mcs2h
+
+yamcfg_SOURCES = yamcfg.c yam.h
+
+mcs2h_SOURCES = mcs2h.c
+
+docdir = ${prefix}/doc/ax25-tools
+doc_DATA = README.yamdrv yam08-2.0.36-patch.diff yam08-2.2.1-patch.diff
+
+
+EXTRA_DIST = $(doc_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(sbin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I..
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_LIBS = @X_LIBS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+yamcfg_OBJECTS = yamcfg.o
+yamcfg_LDADD = $(LDADD)
+yamcfg_DEPENDENCIES =
+yamcfg_LDFLAGS =
+mcs2h_OBJECTS = mcs2h.o
+mcs2h_LDADD = $(LDADD)
+mcs2h_DEPENDENCIES =
+mcs2h_LDFLAGS =
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DATA = $(doc_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+SOURCES = $(yamcfg_SOURCES) $(mcs2h_SOURCES)
+OBJECTS = $(yamcfg_OBJECTS) $(mcs2h_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps yamdrv/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-sbinPROGRAMS:
+
+clean-sbinPROGRAMS:
+ -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+
+distclean-sbinPROGRAMS:
+
+maintainer-clean-sbinPROGRAMS:
+
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(sbindir)
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ list='$(sbin_PROGRAMS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ done
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+yamcfg: $(yamcfg_OBJECTS) $(yamcfg_DEPENDENCIES)
+ @rm -f yamcfg
+ $(LINK) $(yamcfg_LDFLAGS) $(yamcfg_OBJECTS) $(yamcfg_LDADD) $(LIBS)
+
+mcs2h: $(mcs2h_OBJECTS) $(mcs2h_DEPENDENCIES)
+ @rm -f mcs2h
+ $(LINK) $(mcs2h_LDFLAGS) $(mcs2h_OBJECTS) $(mcs2h_LDADD) $(LIBS)
+
+install-docDATA: $(doc_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(docdir)
+ @list='$(doc_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(docdir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(docdir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(docdir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(docdir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-docDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(doc_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(docdir)/$$p; \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = yamdrv
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-sbinPROGRAMS
+install-exec: install-exec-am
+
+install-data-am: install-docDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-sbinPROGRAMS uninstall-docDATA
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS) $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(docdir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-sbinPROGRAMS mostlyclean-compile \
+ mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-sbinPROGRAMS clean-compile clean-tags clean-generic \
+ mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-sbinPROGRAMS distclean-compile distclean-tags \
+ distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-sbinPROGRAMS \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \
+clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \
+install-sbinPROGRAMS mostlyclean-compile distclean-compile \
+clean-compile maintainer-clean-compile uninstall-docDATA \
+install-docDATA tags mostlyclean-tags distclean-tags clean-tags \
+maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+installconf:
+
+# 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:
diff --git a/yamdrv/README.yamdrv b/yamdrv/README.yamdrv
new file mode 100644
index 0000000..f76ac10
--- /dev/null
+++ b/yamdrv/README.yamdrv
@@ -0,0 +1,92 @@
+1998/07/29 Version 0.5
+----------
+
+Driver now supports up to 4 yam modems.
+yam0 default to COM1 0x3f8 irq4
+yam1 default to COM2 0x2f8 irq3
+yam2 default to COM3 0x3e8 irq4
+yam3 default to COM4 0x3e8 irq3
+
+1998/09/01 Version 0.6
+----------
+
+Added : bitrate/baudrate configuration.
+Added : mcs file may be loaded from yamcfg.
+ One mcs file is affected to each bitrate.
+
+ mcs data for 1200 and 9600 bds are preloaded in the driver
+ but may be changed by yamcfg.
+
+options of yamcfg :
+
+ [iobase <iobase>]
+ [irq <irq>]
+ [bitrate <bitrate>]
+ [baudrate <baudrate>]
+ [duplex <mode>]
+ [hold <delay>]
+ [txdelay <txdelay>]
+ [txtail <txtail>]
+ [slottime <slottime>]
+ [persist <persistence>]
+ [load <bitrate> <filename.mcs>]
+
+/proc/net/yam gives the current configuration
+
+
+1998/09/12 Version 0.7
+----------
+
+A patch to the kernel tree 2.0.36 has been created.
+To patch the kernel, do the following :
+
+cd /usr/src
+cat PATH_OF_THE_FILE/yam08-2.2.1-patch.diff | patch -p0
+
+cd linux
+run "make menuconfig" (or other) to configure the yam options.
+
+------------
+
+The program yamcfg get or set the parameters of the yam driver
+yamcfg -h gives a minimum help
+
+Example setup of yam0 for 1 serial port (com2) :
+
+ file /etc/ax25/axports :
+ port0 F1OAT-9 9600 256 2 VHF (9600 bit/s)
+
+ commands :
+ setserial /dev/cua0 port 0 # to avoid conflict with yam driver
+ insmod yam
+ yamcfg yam0 io 0x2f8 irq 3
+ ifconfig yam0 hw ax25 f1oat-9 up
+
+
+
+Example setup of yam0,3 for 4 serial port (com1->com4) :
+
+ file /etc/ax25/axports :
+ port0 F1OAT-9 9600 256 2 VHF (9600 bit/s)
+ port1 F1OAT-8 9600 256 2 UHF1 (9600 bit/s)
+ port2 F1OAT-7 9600 256 2 UHF2 (9600 bit/s)
+ port3 F1OAT-8 9600 256 2 UHF3 (9600 bit/s)
+
+ commands :
+ setserial /dev/cua0 port 0 # to avoid conflict with yam driver
+ setserial /dev/cua1 port 0 # to avoid conflict with yam driver
+ setserial /dev/cua2 port 0 # to avoid conflict with yam driver
+ setserial /dev/cua3 port 0 # to avoid conflict with yam driver
+ insmod yam
+ yamcfg yam2 irq 5
+ yamcfg yam3 irq 7
+ ifconfig yam0 hw ax25 f1oat-9 up
+ ifconfig yam1 hw ax25 f1oat-8 up
+ ifconfig yam2 hw ax25 f1oat-7 up
+ ifconfig yam3 hw ax25 f1oat-6 up
+
+
+
+Good test !!!
+
+73's Frederic F1OAT and Jean-Paul F6FBB
diff --git a/yamdrv/mcs2h.c b/yamdrv/mcs2h.c
new file mode 100644
index 0000000..6914965
--- /dev/null
+++ b/yamdrv/mcs2h.c
@@ -0,0 +1,106 @@
+#include <stdio.h>
+#include <time.h>
+#include <string.h>
+
+int in2hex(char *ptr)
+{
+ char str[3];
+ int val;
+
+ memcpy(str, ptr, 2);
+ str[2] = '\0';
+
+ sscanf(str, "%x", &val);
+
+ return val;
+}
+
+unsigned char swap(unsigned char c)
+{
+ unsigned char r = 0;
+ int i;
+
+ for (i = 0 ; i < 8 ; i++)
+ {
+ r <<= 1;
+ if (c & 1)
+ r |= 1;
+ c >>= 1;
+ }
+ return r;
+}
+
+int in4hex(char *ptr)
+{
+ char str[5];
+ int val;
+
+ memcpy(str, ptr, 4);
+ str[4] = '\0';
+
+ sscanf(str, "%x", &val);
+
+ return val;
+}
+
+int main(int ac, char *av[])
+{
+ int nb, add, type, i;
+ int first = 1;
+ time_t temps;
+ FILE *fptr;
+ char buf[256];
+
+ if (ac != 3)
+ {
+ fprintf(stderr, "format : mcs2h 1200|9600 filename\n");
+ return 1;
+ }
+
+ fptr = fopen(av[2], "r");
+ if (fptr == NULL)
+ {
+ fprintf(stderr, "file %s not found\n", av[2]);
+ return 1;
+ }
+
+ time(&temps);
+
+ printf( "/*\n"
+ " *\n"
+ " * File %s converted to h format by mcs2h\n"
+ " *\n"
+ " * (C) F6FBB 1998\n"
+ " *\n"
+ " * %s"
+ " *\n"
+ " */\n\n",
+ av[2], ctime(&temps));
+
+ printf("static unsigned char bits_%s[]= {\n", av[1]);
+
+ while (fgets(buf, sizeof(buf), fptr))
+ {
+ nb = in2hex(buf+1);
+ add = in4hex(buf+3);
+ type = in2hex(buf+7);
+
+ if (type != 0)
+ continue;
+
+ if (first)
+ first = 0;
+ else
+ printf(",\n");
+
+ for (i = 0 ; i < nb ; i++)
+ {
+ printf("0x%02x%s", swap(in2hex(buf+9+i*2)), (i < (nb-1)) ? "," : "");
+ }
+ }
+
+ printf(" };\n");
+
+ fclose(fptr);
+ return 0;
+}
diff --git a/yamdrv/yam.h b/yamdrv/yam.h
new file mode 100644
index 0000000..7fe2822
--- /dev/null
+++ b/yamdrv/yam.h
@@ -0,0 +1,82 @@
+/*****************************************************************************/
+
+/*
+ * yam.h -- YAM radio modem driver.
+ *
+ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr)
+ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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.
+ *
+ * Please note that the GPL allows you to use the driver, NOT the radio.
+ * In order to use the radio, you need a license from the communications
+ * authority of your country.
+ *
+ *
+ */
+
+/*****************************************************************************/
+
+#define SIOCYAMRESERVED (0)
+#define SIOCYAMSCFG (1) /* Set configuration */
+#define SIOCYAMGCFG (2) /* Get configuration */
+#define SIOCYAMSMCS (3) /* Set mcs data */
+
+#define YAM_IOBASE (1 << 0)
+#define YAM_IRQ (1 << 1)
+#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */
+#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */
+#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */
+#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */
+#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */
+#define YAM_PERSIST (1 << 7) /* Persist (ms) */
+#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */
+#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */
+
+#define YAM_MAXBITRATE 57600
+#define YAM_MAXBAUDRATE 115200
+#define YAM_MAXMODE 2
+#define YAM_MAXHOLDDLY 99
+#define YAM_MAXTXDELAY 999
+#define YAM_MAXTXTAIL 999
+#define YAM_MAXPERSIST 255
+#define YAM_MAXSLOTTIME 999
+
+#define YAM_FPGA_SIZE 5302
+
+struct yamcfg {
+ unsigned int mask; /* Mask of commands */
+ unsigned int iobase; /* IO Base of COM port */
+ unsigned int irq; /* IRQ of COM port */
+ unsigned int bitrate; /* Bit rate of radio port */
+ unsigned int baudrate; /* Baud rate of the RS232 port */
+ unsigned int txdelay; /* TxDelay */
+ unsigned int txtail; /* TxTail */
+ unsigned int persist; /* Persistence */
+ unsigned int slottime; /* Slottime */
+ unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */
+ unsigned int holddly; /* PTT delay in FullDuplex 2 mode */
+};
+
+struct yamdrv_ioctl_cfg {
+ int cmd;
+ struct yamcfg cfg;
+};
+
+struct yamdrv_ioctl_mcs {
+ int cmd;
+ int bitrate;
+ unsigned char bits[YAM_FPGA_SIZE];
+};
diff --git a/yamdrv/yam08-2.0.36-patch.diff b/yamdrv/yam08-2.0.36-patch.diff
new file mode 100755
index 0000000..07e0712
--- /dev/null
+++ b/yamdrv/yam08-2.0.36-patch.diff
@@ -0,0 +1,2180 @@
+diff -u --recursive --new-file linux.prev/Documentation/Configure.help linux/Documentation/Configure.help
+--- linux.prev/Documentation/Configure.help Sat Sep 12 23:12:05 1998
++++ linux/Documentation/Configure.help Sat Sep 12 23:07:13 1998
+@@ -2284,6 +2284,13 @@
+ running kernel whenever you want), say M here and read
+ Documentation/modules.txt.
+
++YAM driver for AX.25
++CONFIG_YAM
++ Support for the YAM modem on serial port. If you want to compile this
++ as a module ( = code which can be inserted in and removed from the
++ running kernel whenever you want), say M here and read
++ Documentation/modules.txt.
++
+ BAYCOM ser12 and par96 driver for AX.25
+ CONFIG_BAYCOM
+ This is an experimental driver for Baycom style simple amateur radio
+diff -u --recursive --new-file linux.prev/drivers/net/Config.in linux/drivers/net/Config.in
+--- linux.prev/drivers/net/Config.in Sat Sep 12 23:11:49 1998
++++ linux/drivers/net/Config.in Sat Sep 12 22:02:40 1998
+@@ -46,6 +46,7 @@
+ tristate 'Z8530 SCC KISS emulation driver for AX.25' CONFIG_SCC
+ tristate 'STRIP (Metricom starmode radio IP)' CONFIG_STRIP
+ tristate 'AT&T WaveLAN & DEC RoamAbout DS support' CONFIG_WAVELAN
++ tristate 'YAM driver for AX.25' CONFIG_YAM
+ fi
+ #
+ # Ethernet
+diff -u --recursive --new-file linux.prev/drivers/net/Makefile linux/drivers/net/Makefile
+--- linux.prev/drivers/net/Makefile Sat Sep 12 23:11:49 1998
++++ linux/drivers/net/Makefile Sat Sep 12 22:01:01 1998
+@@ -515,6 +515,14 @@
+ endif
+ endif
+
++ifeq ($(CONFIG_YAM),y)
++L_OBJS += yam.o
++else
++ ifeq ($(CONFIG_YAM),m)
++ M_OBJS += yam.o
++ endif
++endif
++
+ ifeq ($(CONFIG_PI),y)
+ L_OBJS += pi2.o
+ else
+diff -u --recursive --new-file linux.prev/drivers/net/Space.c linux/drivers/net/Space.c
+--- linux.prev/drivers/net/Space.c Sat Sep 12 23:11:49 1998
++++ linux/drivers/net/Space.c Sat Sep 12 22:01:42 1998
+@@ -352,6 +352,16 @@
+ #define NEXT_DEV (&mkiss_bootstrap)
+ #endif /* MKISS */
+
++#if defined(CONFIG_YAM)
++ /* To be exact, this node just hooks the initialization
++ routines to the device structures. */
++extern int yam_init(struct device *);
++static struct device yam_bootstrap = {
++ "yam", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, yam_init, };
++#undef NEXT_DEV
++#define NEXT_DEV (&yam_bootstrap)
++#endif /* CONFIG_YAM */
++
+ #if defined(CONFIG_STRIP)
+ extern int strip_init_ctrl_dev(struct device *);
+ static struct device strip_bootstrap = {
+diff -u --recursive --new-file linux.prev/include/linux/yam.h linux/include/linux/yam.h
+--- linux.prev/include/linux/yam.h Thu Jan 1 00:00:00 1970
++++ linux/include/linux/yam.h Sat Sep 12 22:03:24 1998
+@@ -0,0 +1,82 @@
++/*****************************************************************************/
++
++/*
++ * yam.h -- YAM radio modem driver.
++ *
++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr)
++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You 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.
++ *
++ * Please note that the GPL allows you to use the driver, NOT the radio.
++ * In order to use the radio, you need a license from the communications
++ * authority of your country.
++ *
++ *
++ */
++
++/*****************************************************************************/
++
++#define SIOCYAMRESERVED (0)
++#define SIOCYAMSCFG (1) /* Set configuration */
++#define SIOCYAMGCFG (2) /* Get configuration */
++#define SIOCYAMSMCS (3) /* Set mcs data */
++
++#define YAM_IOBASE (1 << 0)
++#define YAM_IRQ (1 << 1)
++#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */
++#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */
++#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */
++#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */
++#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */
++#define YAM_PERSIST (1 << 7) /* Persist (ms) */
++#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */
++#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */
++
++#define YAM_MAXBITRATE 57600
++#define YAM_MAXBAUDRATE 115200
++#define YAM_MAXMODE 2
++#define YAM_MAXHOLDDLY 99
++#define YAM_MAXTXDELAY 999
++#define YAM_MAXTXTAIL 999
++#define YAM_MAXPERSIST 255
++#define YAM_MAXSLOTTIME 999
++
++#define YAM_FPGA_SIZE 5302
++
++struct yamcfg {
++ unsigned int mask; /* Mask of commands */
++ unsigned int iobase; /* IO Base of COM port */
++ unsigned int irq; /* IRQ of COM port */
++ unsigned int bitrate; /* Bit rate of radio port */
++ unsigned int baudrate; /* Baud rate of the RS232 port */
++ unsigned int txdelay; /* TxDelay */
++ unsigned int txtail; /* TxTail */
++ unsigned int persist; /* Persistence */
++ unsigned int slottime; /* Slottime */
++ unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */
++ unsigned int holddly; /* PTT delay in FullDuplex 2 mode */
++};
++
++struct yamdrv_ioctl_cfg {
++ int cmd;
++ struct yamcfg cfg;
++};
++
++struct yamdrv_ioctl_mcs {
++ int cmd;
++ int bitrate;
++ unsigned char bits[YAM_FPGA_SIZE];
++};
+diff -u --recursive --new-file linux.prev/drivers/net/yam1200.h linux/drivers/net/yam1200.h
+--- linux.prev/drivers/net/yam1200.h Thu Jan 1 00:00:00 1970
++++ linux/drivers/net/yam1200.h Sat Sep 12 22:03:34 1998
+@@ -0,0 +1,343 @@
++/*
++ *
++ * File yam1k2b5.mcs converted to h format by mcs2h
++ *
++ * (C) F6FBB 1998
++ *
++ * Tue Aug 25 20:24:08 1998
++ *
++ */
++
++static unsigned char bits_1200[]= {
++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xf3,0xcb,0xff,0xdb,0xfc,0xf2,
++0xff,0xf6,0xff,0x3c,0xbf,0xfd,0xbf,0xdf,0x6e,0x3f,0x6f,0xf1,0x7d,0xb4,0xfd,0xbf,
++0xdf,0x6f,0x3f,0x6f,0xf7,0x0b,0xff,0xdb,0xfd,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff,
++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
++0xfd,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xbf,
++0xff,0xff,0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfc,0xff,0xfe,0xff,0xff,0xff,0xf0,
++0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf1,0xff,0xff,0xfe,0x7f,0xbf,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xff,0xff,0xf0,0x9f,
++0xff,0xff,0xff,0xfe,0xff,0xfd,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xff,
++0xff,0xff,0xfb,0xff,0xfb,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xf0,0x5f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xbf,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,
++0xff,0xff,0xff,0xfd,0xff,0xbf,0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xfb,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff,
++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xf7,0xff,0xff,0xf1,0xff,0xff,0xf7,0xbf,0xe7,0xff,0xff,0xff,0xff,0xfb,
++0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdb,
++0xff,0xff,0xf5,0xa5,0xfd,0x4b,0x6e,0xef,0x33,0x32,0xdd,0xd3,0x4a,0xd6,0x92,0xfe,
++0xb3,0x3f,0xbd,0xf1,0xfa,0xdb,0xfe,0xf7,0xf6,0x96,0xbd,0xbd,0xff,0xbd,0xff,0xed,
++0x7f,0x6b,0x7f,0xfb,0xdf,0xfe,0xfb,0xfe,0x90,0xcf,0xff,0xff,0xff,0xfe,0xbe,0xef,
++0xff,0xff,0xdb,0x5f,0xf6,0xff,0xf6,0x8f,0xfd,0xa5,0xdd,0xff,0xff,0xff,0xff,0x6f,
++0x7f,0xdb,0xf1,0xfc,0xbf,0xff,0x6f,0xff,0xef,0xfc,0x5b,0x5d,0xda,0xdf,0xf4,0xff,
++0xf2,0xff,0xfd,0xbf,0xff,0xff,0xff,0xd0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xfb,0xef,0xb7,0xfc,0x33,0xff,0xfb,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0,
++0x0f,0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x72,0x0f,0xf1,0x6f,0xff,0xfe,0x94,0x3f,
++0xff,0xff,0xff,0x7b,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf0,
++0xf7,0xef,0xb7,0xfc,0x33,0xff,0xff,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0,0x0f,
++0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x73,0x8f,0xf2,0x6f,0xff,0xfe,0x94,0x3f,0xff,
++0xff,0xff,0x7d,0x9f,0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x9e,
++0xff,0xfc,0xef,0xd3,0xfb,0xff,0x7f,0xf5,0x5f,0xfe,0x59,0xff,0xff,0xff,0xfc,0xf1,
++0xfe,0x7f,0xff,0xff,0xfa,0x17,0xff,0xe7,0xef,0xef,0xff,0xff,0x3f,0xf1,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xfc,0xea,
++0xff,0xf0,0xff,0xff,0xbf,0xf9,0x3f,0xb1,0xef,0xff,0xd7,0xff,0xfb,0xff,0xf0,0xff,
++0xff,0xf3,0xff,0xdf,0xff,0x7b,0xff,0xfd,0xff,0xf6,0xff,0xbf,0xff,0xff,0xbf,0xff,
++0xff,0xff,0xda,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x01,0x00,0x00,0x02,0x02,
++0x02,0x02,0x00,0x40,0x40,0x40,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00,
++0x00,0x00,0x00,0x00,0x19,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
++0x00,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfb,0xff,0xfd,0xff,
++0xff,0x7f,0xff,0xff,0xbf,0xff,0xef,0xff,0xff,0xfd,0xff,0xff,0xf1,0xff,0xdf,0xff,
++0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,
++0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xdf,0xff,0x7f,0xff,0xff,0xff,0xff,
++0xdf,0xdf,0xff,0xef,0xff,0x9e,0xef,0xff,0xff,0x7f,0xff,0xf1,0xef,0xff,0xff,0xff,
++0xf7,0xfa,0xbf,0xff,0xff,0xfe,0x47,0xef,0xff,0xbd,0xf6,0xff,0xff,0xdf,0xf5,0xf0,
++0xf0,0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x01,0x02,0x08,
++0x16,0x00,0x00,0x00,0x80,0x00,0x01,0x02,0x00,0x80,0x01,0x0c,0x02,0x00,0x00,0x01,
++0x00,0x00,0x20,0x00,0x00,0x06,0x00,0x20,0x00,0x10,0x00,0x14,0x00,0x04,0xc1,0xf0,
++0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f,
++0xec,0xff,0xff,0xfa,0xff,0xbf,0xff,0x6f,0xff,0xe1,0xff,0xff,0xff,0xff,0xbd,0xfe,
++0x46,0xff,0xef,0x7f,0xcd,0xdf,0xff,0xff,0xfd,0xff,0xbd,0xff,0x7f,0x7f,0xf0,0x4f,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa4,0xbc,0xcd,0x6d,0x6b,0x6f,0x5b,0xdc,0x33,
++0x5a,0xf6,0xf7,0xf6,0xb3,0x3f,0xbd,0xc1,0xfa,0x5a,0xf6,0xf6,0xb6,0xf7,0xff,0xbd,
++0xbb,0x3c,0xce,0xcf,0x34,0xef,0x33,0xbb,0xcc,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,
++0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xd6,0xff,0xfd,0xfd,0xbf,0xff,0xad,
++0xbf,0xf9,0x7f,0x6f,0xfc,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0xff,0xda,0xdb,0xfc,
++0xdb,0xff,0x76,0x8f,0xf6,0xff,0xcd,0xab,0xfe,0xfb,0xff,0xd0,0xff,0xff,0xff,0xff,
++0xfe,0xff,0x9f,0xff,0xf4,0x20,0xaf,0x6d,0x0b,0xc1,0x7b,0xff,0xff,0xff,0xcb,0xff,
++0x3f,0xf0,0xef,0x7f,0x0f,0xf1,0xc3,0x3c,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0b,
++0x1d,0x6a,0x64,0x05,0x6b,0x99,0x01,0xff,0xfd,0xef,0xf0,0x2f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xf4,0x00,0x2f,0xcc,0x0b,0xc3,0x7f,0xff,0xff,0xff,0x0a,0xdf,0xbf,
++0xfd,0x7f,0xff,0xff,0xf1,0xc3,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x4a,0x0e,
++0x96,0x64,0x02,0x97,0x99,0x10,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xfe,0x84,0xf9,0xd5,0x27,0xf1,0x7f,0xff,0xf8,0xeb,0xdf,0xf3,0xcf,0x3f,
++0x1f,0xff,0xf7,0x11,0xff,0xcf,0xff,0xfe,0x67,0xff,0xff,0xff,0xff,0xc4,0xff,0xff,
++0xb3,0xa1,0xff,0xf9,0xe0,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff,
++0xff,0xfb,0x7f,0xe0,0xff,0xc7,0xfe,0x7f,0x3f,0xff,0xfd,0x77,0x8d,0x7f,0x0f,0xff,
++0xc3,0xff,0xf1,0xbf,0x8f,0xcf,0xff,0xff,0xdd,0x7b,0xff,0xf6,0xfa,0xf7,0xff,0x40,
++0x9f,0xf9,0x7f,0xd8,0xff,0xff,0xfa,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,
++0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x10,
++0x00,0x01,0x00,0x10,0x20,0x20,0x00,0x00,0x10,0x00,0x04,0x01,0x05,0x00,0x00,0x00,
++0x00,0x40,0x40,0x00,0x00,0x3c,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,
++0xff,0xff,0xfe,0x7f,0x7f,0xff,0xef,0xff,0xff,0xdf,0xff,0xff,0xdf,0xff,0xef,0xf7,
++0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xfc,0xfd,0xff,0x7f,
++0x7e,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0xff,0xff,
++0xff,0xff,0xfe,0xeb,0xfd,0x6f,0xff,0xf7,0xfe,0xf5,0x7f,0xff,0xff,0x7f,0xbf,0xb1,
++0xff,0xff,0x9f,0xbf,0xfb,0xff,0xfe,0xff,0xfe,0xff,0xf7,0xeb,0xdf,0xbf,0x5f,0xdd,
++0xff,0xdb,0xfd,0xd0,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x00,0x42,0x00,
++0x00,0x00,0x30,0x18,0x04,0x08,0x09,0x21,0x82,0x80,0x02,0x00,0x08,0x00,0x01,0x00,
++0x00,0x00,0x0c,0x20,0x10,0x00,0x11,0x00,0x44,0x84,0x00,0x20,0x20,0x84,0x80,0x00,
++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xdd,0xf9,0xff,
++0xda,0xff,0xdc,0xdd,0xfc,0xfb,0xff,0xbf,0xfb,0x3e,0xd7,0x96,0xfe,0x61,0xf7,0xff,
++0x7f,0xff,0x3f,0xfd,0xff,0xdf,0xcf,0xf7,0xdf,0xf7,0xbf,0xfd,0xff,0xfe,0xef,0xef,
++0xfe,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf3,0xbd,0xfd,0x4b,0x74,0xcf,
++0x73,0x5b,0xcb,0x3b,0xdf,0xfe,0xf7,0xfe,0xd3,0x75,0xac,0xa1,0xfb,0xdf,0xfe,0xf7,
++0x76,0x96,0xb5,0x24,0xbd,0xa5,0xad,0x49,0x2f,0x69,0x2b,0x52,0x5b,0xbd,0xff,0xff,
++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0xff,0xcc,
++0xa7,0xfb,0xad,0xff,0x7f,0x6f,0xff,0x6d,0x7f,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,
++0x6f,0xff,0xdb,0xff,0xdb,0xff,0xf6,0x97,0xf6,0xff,0xb5,0xb5,0xff,0xff,0xff,0xd0,
++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa5,0xbc,0x43,0xfc,0x7c,0x03,0xe7,
++0xff,0xff,0x20,0xff,0xff,0xff,0xcc,0xfd,0x7d,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59,
++0xba,0x56,0x66,0x6a,0xad,0x9a,0xa9,0x9a,0x97,0xa5,0xaa,0xbb,0xff,0xff,0xf0,0x0f,
++0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xfd,0xf7,0xfd,0x43,0xff,0xfd,0x6b,0xe7,0xff,
++0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0x3f,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59,0xb5,
++0xa6,0x66,0x6a,0xad,0x9a,0xa9,0x99,0x6b,0x5a,0xaa,0xff,0xff,0xb7,0xf0,0x3f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x9c,0xf7,0xfd,0xd2,0x41,0xff,0xff,0xf2,0x7f,
++0x8f,0xff,0xff,0x3d,0xf3,0xff,0x17,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,0xdf,0xfc,
++0x8f,0x38,0xff,0xef,0x23,0xff,0xfb,0xf7,0xc8,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,
++0xff,0xfe,0xf5,0x7f,0xff,0xfd,0xff,0xe4,0xff,0xeb,0xff,0xcf,0xbf,0xfa,0xff,0xab,
++0xef,0xff,0xfb,0xff,0xf3,0xfd,0x61,0xff,0xff,0xff,0xff,0xfa,0xff,0xfb,0xfd,0x0d,
++0xff,0xfe,0xff,0x43,0x7f,0xfe,0xbf,0xd0,0xfd,0xff,0xfa,0xf0,0x3f,0xff,0xff,0xff,
++0xfe,0xf3,0xc0,0x00,0x00,0x00,0x02,0x00,0x02,0x01,0x00,0x60,0xc0,0x40,0x00,0x00,
++0x00,0x00,0x34,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x88,0x00,
++0x00,0x03,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x3c,0xf0,0x3f,0xff,0xff,0xff,0xfe,
++0xfd,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfd,0xff,
++0xff,0xff,0xff,0xfe,0xfe,0x5f,0xff,0xff,0xcb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0,
++0xff,0xff,0xfd,0xff,0xef,0xe3,0xde,0xee,0xd9,0xc5,0x93,0xff,0xff,0xfe,0xfe,0xff,
++0xfb,0xee,0xfe,0xf1,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xbf,0xf7,0xff,0xff,0x7f,
++0xaf,0xbd,0xdf,0xdf,0xfb,0xf3,0xf3,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x34,
++0x00,0x06,0x61,0x00,0x18,0x01,0xa0,0x05,0x17,0x00,0x20,0x05,0x28,0x20,0x00,0x00,
++0x05,0x00,0x41,0x00,0x00,0x40,0x00,0x09,0x00,0x01,0x20,0x86,0x82,0x08,0x40,0x03,
++0x80,0x30,0x70,0x08,0x14,0x02,0xc1,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0xbd,0xef,0xfb,0xff,0xff,0xfb,0x9c,0x7f,0xef,0xdf,0xff,0xbf,0xeb,0xde,
++0xff,0xc1,0x7f,0xff,0xfb,0x7f,0xff,0xff,0xff,0x5f,0xff,0xff,0xff,0xdf,0xbf,0xef,
++0x3f,0xf7,0x8f,0xef,0x7f,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbd,
++0xdf,0xef,0x7d,0x6d,0x2b,0x5a,0x5d,0xd2,0xdf,0xf6,0x92,0xb6,0xb2,0xb3,0xac,0xa1,
++0xfb,0xdf,0xfe,0xf1,0xee,0xf5,0xf6,0xbc,0x6b,0xbd,0x7d,0xaf,0x1a,0xef,0x5f,0x6b,
++0xc6,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,
++0xf6,0xff,0xf6,0xb7,0xfd,0xad,0xfd,0xbf,0xf3,0x6f,0xff,0x6f,0xff,0xdb,0xd1,0xfd,
++0xbf,0xff,0x6f,0xf5,0x6b,0xbc,0x5b,0x3c,0xda,0xef,0x16,0xaf,0x16,0xff,0xcd,0xab,
++0xff,0x6f,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfc,0xbf,0xff,0xff,
++0xff,0x6c,0x03,0x10,0xc1,0xf3,0xff,0xf3,0x3a,0xf3,0xca,0xff,0xaf,0xf1,0xff,0xff,
++0xff,0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff,
++0xff,0x5f,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,
++0xea,0x0f,0x50,0xc3,0xf3,0x7f,0xff,0xf3,0xf3,0xc3,0xff,0xaf,0xf1,0xff,0xff,0xff,
++0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff,0xff,
++0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x5f,0xc1,
++0x3f,0xf7,0x5e,0xf5,0xce,0x9e,0x5f,0x3f,0x17,0xff,0xf3,0xe1,0xff,0xff,0xff,0xff,
++0xd8,0xff,0xfa,0xfe,0x67,0xff,0xfe,0xbf,0x5a,0xff,0xff,0xaf,0xf5,0xff,0xff,0xff,
++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfd,0xff,0xf7,0xff,0xfd,0x4e,0x3d,
++0x3f,0xe7,0x0b,0xbf,0x8f,0xf9,0xff,0xeb,0xe3,0xff,0xe1,0xff,0xff,0xfc,0xff,0xc7,
++0x9f,0xff,0x3e,0x39,0xe5,0xff,0xcf,0x9b,0xf9,0xff,0xff,0xc5,0xff,0xff,0xfa,0xf0,
++0x5f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
++0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x20,
++0x00,0x01,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xf0,0x4f,
++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xbf,
++0x3f,0xff,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf1,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,
++0xff,0xed,0xff,0xfb,0xfe,0xff,0x7f,0xff,0x7f,0xdf,0xff,0xff,0xdd,0xf0,0x3f,0xff,
++0xff,0xff,0xfe,0xf0,0xff,0xff,0xf3,0xff,0xf7,0xff,0xfe,0x5f,0xff,0xf7,0xff,0xff,
++0xdf,0xff,0xff,0xff,0xf7,0xfe,0x7b,0xf1,0xff,0xfd,0xfd,0xff,0xdf,0xdf,0xff,0x7d,
++0x73,0xf9,0xff,0xc3,0x7e,0xfe,0xff,0xef,0xd7,0xff,0xcf,0xd0,0xf0,0x6f,0xff,0xff,
++0xff,0xfe,0xf8,0x30,0x00,0x00,0x40,0x04,0x00,0x01,0x41,0x20,0x00,0x04,0x00,0x02,
++0xd5,0x09,0x00,0x02,0x80,0x02,0x01,0x00,0x00,0x00,0x0a,0x04,0x00,0x07,0x00,0x01,
++0x50,0x01,0x80,0x02,0x61,0x40,0x41,0x0c,0x14,0x08,0xc1,0xf0,0x9f,0xff,0xff,0xff,
++0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xdf,0xcb,0x5f,0xfe,0xef,0xff,0xfe,
++0xff,0x3f,0xff,0x7f,0xfd,0xc1,0xff,0xff,0x7f,0xff,0xdf,0xfd,0xfc,0xfd,0xf7,0xee,
++0xff,0xff,0x4e,0xff,0xdf,0xcf,0xdb,0xeb,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0x7f,
++0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,
++0xf7,0xfb,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0x7f,0xff,0xff,0xff,0x7f,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdd,0xff,
++0xff,0xff,0xa5,0xff,0x6f,0x6b,0xe9,0x6f,0xda,0xca,0xfb,0xdd,0xee,0xf7,0xf6,0xb2,
++0xb3,0xa4,0xa1,0x5b,0x5b,0xf6,0xd7,0xf4,0xf7,0x7b,0xbd,0xbd,0xad,0xcf,0xef,0x7f,
++0x6b,0x7f,0x3b,0xdf,0xdb,0xff,0xff,0x30,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
++0xff,0xff,0xff,0xf6,0xfe,0x96,0xff,0xfd,0xb5,0xfd,0xbf,0xad,0x7f,0xff,0x6f,0xff,
++0xde,0xd1,0xad,0xad,0xe9,0xff,0xf1,0xec,0xef,0xde,0x3f,0xcb,0xff,0xf6,0xff,0x32,
++0xff,0xc5,0xbd,0xff,0xff,0xff,0xd0,0xbf,0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xf4,
++0x28,0xbf,0xff,0xfd,0xfb,0xd3,0xff,0xff,0x42,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3,
++0xc1,0xff,0x33,0xff,0xc0,0x15,0x6b,0x70,0xff,0xf0,0xf2,0x4f,0xff,0xfc,0x3e,0x97,
++0x3c,0xff,0xff,0xfd,0xef,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x78,
++0xbf,0xff,0xfd,0xf3,0xef,0x55,0xff,0x7e,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3,0xc1,
++0xff,0x33,0xff,0xc0,0x15,0x6f,0xff,0x0f,0xf0,0xf0,0x0f,0xff,0xfc,0x3d,0x6b,0xc3,
++0xff,0xff,0xfe,0xf7,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,
++0xff,0x23,0xf8,0x7f,0xff,0x4e,0xff,0xff,0xff,0xfb,0xf9,0x17,0xff,0xf6,0xf1,0xff,
++0xcf,0xef,0xff,0xff,0x13,0xdf,0xe6,0x2f,0xc7,0xff,0xff,0xe7,0xc1,0xfd,0xff,0xfe,
++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xfe,0xae,0xff,
++0xff,0x7f,0x3b,0x3f,0xfc,0x7f,0xfc,0xef,0xff,0xfc,0xe2,0x7b,0xff,0xf1,0xfd,0xed,
++0xef,0xff,0xff,0x35,0x73,0xff,0xff,0xfe,0xfa,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
++0xff,0xfa,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x0c,0x04,0x01,0x40,0x40,0x00,
++0x00,0x30,0x28,0x04,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,
++0x38,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xfb,0xff,0x7f,
++0xff,0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xdf,0xdf,0xff,
++0xff,0xff,0xff,0xed,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xff,0xff,0xc3,
++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xfd,0xff,0xbf,0xff,0xff,0xfd,0xff,0xff,
++0xff,0xff,0xff,0xfd,0x7b,0xff,0x7f,0xff,0xbd,0xff,0xf1,0xef,0xff,0xff,0xfd,0xdf,
++0xfd,0xfb,0xff,0xff,0xbf,0xbe,0xff,0xcd,0x7f,0xfc,0xf7,0xf7,0x6f,0xbf,0xd8,0xf0,
++0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,0x00,
++0xc0,0x00,0x00,0x20,0x34,0x00,0x00,0x00,0x0c,0x81,0x00,0x20,0xa4,0x20,0x00,0x10,
++0x08,0x04,0x48,0x08,0x00,0x40,0x93,0x00,0x10,0x00,0x38,0x18,0x20,0xc1,0xf0,0x3f,
++0xff,0xff,0xff,0xfe,0xff,0xfb,0xff,0xff,0xb9,0xdf,0xfe,0xb3,0xff,0xff,0xe7,0xfd,
++0xff,0xff,0x3b,0xff,0x7f,0xff,0xbf,0xff,0xc1,0xff,0xfc,0xff,0xff,0x3f,0x77,0xfe,
++0xfe,0xcf,0xff,0xbf,0xfd,0xbf,0xff,0xfe,0xed,0xf2,0xfd,0xf7,0xff,0xf0,0x2f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xf3,0xad,0xcf,0xef,0x70,0xc9,0x73,0x3b,0xdf,0x5b,0x4a,
++0xf6,0xb7,0xfe,0xd7,0xf5,0xbc,0xc1,0x33,0xca,0xd6,0xb7,0x6e,0xf7,0xfb,0xbd,0xc5,
++0x24,0xcf,0x6f,0x2f,0x4d,0x2b,0xba,0x5a,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,
++0xfe,0xbf,0xff,0xff,0xff,0xff,0xf6,0xf6,0xd7,0xff,0xff,0xad,0xbd,0xff,0xff,0xff,
++0xef,0xf7,0x7f,0xfc,0x5b,0xb1,0xfd,0xbd,0x75,0x6f,0xef,0x6a,0xfd,0x5b,0xfb,0xdb,
++0x3a,0xbf,0x8e,0x9f,0xff,0xbf,0xfd,0xff,0x6f,0xff,0xd0,0x6f,0xff,0xff,0xff,0xfe,
++0xff,0xbb,0xff,0xf0,0x3f,0xff,0xff,0xfd,0xfb,0x7f,0xde,0xff,0xff,0x5a,0xd6,0xbf,
++0xd8,0x2a,0xbf,0xbf,0xf1,0xe5,0xff,0xcc,0xc0,0xa9,0x70,0xff,0xf3,0x3c,0x3c,0xfd,
++0x57,0xfd,0x98,0x03,0x00,0xc3,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0x3d,0xbf,0xff,0xfd,0xfb,0xff,0xdb,0xff,0xff,0x0f,0xfc,0x3f,0xd8,
++0x2a,0xbf,0xbf,0xf1,0xef,0xff,0xcc,0xc0,0x96,0xbe,0xff,0xf3,0x3f,0xff,0xfd,0x57,
++0xfd,0x99,0x0f,0xff,0xc3,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xf1,0xe7,0xff,0xff,0xf3,0x8e,0x7b,0xff,0xa8,0xff,0xdf,0x7f,0x8e,0x78,0x73,
++0xff,0xf1,0x51,0x62,0xff,0xfc,0x4b,0xff,0xf3,0xff,0x7e,0xcf,0xf9,0xff,0xfd,0xff,
++0xff,0x7f,0xff,0xe0,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,
++0xfb,0xfd,0xae,0xff,0xfc,0xfe,0x6f,0x3f,0xf8,0xfd,0x77,0xaf,0xfe,0x37,0xfe,0x7b,
++0xff,0xb1,0x8c,0xff,0xef,0xfd,0xf8,0xe7,0xbf,0xff,0xf1,0xfe,0x3e,0xf7,0xfe,0x95,
++0x3e,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00,
++0x01,0x04,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x08,
++0x41,0x80,0x10,0x00,0x00,0x08,0x10,0x84,0x00,0x0c,0x04,0x02,0x61,0x00,0x00,0x81,
++0x00,0x00,0x00,0x00,0x3d,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,
++0xff,0xff,0x7f,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0x7f,0xbf,0xf7,0x7f,0xef,0xff,0xef,0xff,0xf7,0xfd,0xff,0xff,0xfd,0x7f,0xff,0xbe,
++0xdf,0xff,0xff,0xd9,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0x7f,0xfb,0xff,
++0xfb,0xff,0xbf,0xff,0xf3,0x7f,0xfb,0xfd,0xeb,0x7f,0xdf,0xfa,0xff,0xde,0xf0,0xed,
++0xff,0xb1,0xf7,0xf9,0x1f,0xb5,0x5b,0xfe,0x7e,0xf7,0xbe,0xfd,0x7f,0x5f,0xb5,0xf7,
++0xff,0xff,0xd0,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x01,0x00,0x07,0x42,0x01,
++0x00,0x6a,0x18,0x50,0x80,0x00,0x00,0x02,0x40,0x01,0x01,0x20,0x01,0x01,0x24,0x14,
++0x21,0x10,0x02,0x08,0x07,0x08,0x00,0x40,0x10,0x80,0x58,0x00,0x84,0x80,0x18,0x10,
++0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xff,0xdb,0xb7,0xf3,
++0xdf,0x7c,0xf8,0x74,0xff,0xff,0x6f,0x7d,0x3f,0x7e,0xec,0x7f,0xc1,0xf5,0xff,0xcf,
++0x6f,0x9f,0xf9,0xdf,0xbe,0xe5,0xe7,0xff,0xd7,0xf3,0xdd,0xfb,0xff,0xfc,0xff,0xbf,
++0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xff,0xb4,0xcf,0xef,0x77,0x6f,0x73,
++0x3a,0x4a,0x3a,0xcb,0xd4,0xf7,0x2e,0xd6,0xbd,0xbd,0xa1,0x3b,0xdf,0xd6,0xf7,0xee,
++0xd3,0x35,0xbd,0xfb,0xbd,0xce,0xeb,0x2b,0x4d,0x2f,0xbb,0xda,0xff,0xff,0xfe,0xb0,
++0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdf,0x5f,0x36,0xaf,0x3f,0xed,0xb7,
++0xf5,0xfd,0xf3,0x2b,0xef,0x77,0xff,0xfb,0xda,0xb1,0xbd,0xa3,0x77,0x69,0x7f,0x4f,
++0xff,0xdb,0xfa,0x5b,0xff,0xf2,0xfe,0xff,0x96,0xff,0xff,0xfe,0xdf,0xff,0xd0,0xaf,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x8f,0xfd,0x40,0x6f,0x9e,0x83,0x5a,0x0f,
++0xfa,0xc3,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xd0,0x00,0xfe,0xbf,0xcd,0x3f,0xf0,
++0xef,0xfc,0xc5,0x0c,0x3f,0xfd,0x68,0x0b,0xff,0xff,0xff,0xfe,0xdf,0xf0,0xff,0xff,
++0xff,0xff,0xfe,0xff,0xbb,0xff,0xfd,0x85,0xff,0xd4,0x6f,0x9f,0xc3,0x5a,0x0f,0xff,
++0xff,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xf0,0xfb,0xc2,0xbf,0xfc,0x00,0x37,0xef,
++0xfc,0xcd,0xbc,0x3f,0xff,0x0c,0xbf,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xd9,0xf7,0xd1,0xb7,0x7e,0x7f,0xf1,0xe4,0xfd,0xff,
++0xfb,0xfb,0xff,0x5f,0xff,0x7f,0xb1,0xbc,0x0f,0x67,0xeb,0xb8,0x3f,0xff,0xe2,0xff,
++0xe9,0xff,0xfd,0xe3,0xff,0x3f,0x9f,0xc2,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,
++0xfe,0xf5,0x7f,0xff,0xf0,0x3f,0xbc,0xff,0xd5,0xf5,0xce,0x3f,0xfe,0xff,0xfe,0x6d,
++0xff,0xf1,0xbf,0x7b,0xff,0xf1,0xfd,0xff,0x4f,0xff,0x87,0xff,0xae,0xff,0xb1,0xf8,
++0xfe,0xff,0xff,0x78,0x01,0xb9,0xff,0xff,0xff,0xfa,0xf0,0x2f,0xff,0xff,0xff,0xfe,
++0xf3,0xc0,0x00,0x00,0x00,0x04,0x02,0x13,0x02,0x00,0x80,0x40,0x00,0x90,0x10,0x00,
++0x10,0x00,0x02,0x00,0x01,0x20,0x80,0x12,0x10,0x00,0x40,0x08,0x00,0x04,0x00,0x00,
++0x02,0x00,0x01,0x40,0x00,0x80,0x00,0x00,0x3c,0xf0,0xef,0xff,0xff,0xff,0xfe,0xfd,
++0x1f,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xf7,0xdf,0xf7,0xff,
++0xf7,0xfb,0xeb,0xd1,0xff,0xff,0xff,0xff,0xef,0xf7,0xff,0xff,0xfb,0xff,0xfe,0xff,
++0xff,0x7e,0xff,0xfb,0xff,0xff,0xff,0xdb,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf0,0xff,
++0xff,0xb7,0xeb,0xf7,0xdf,0xff,0xfe,0xf5,0x6b,0xe7,0xed,0xf7,0x3e,0xec,0xff,0x54,
++0xef,0x6f,0xf1,0xf5,0xaf,0x6f,0xf6,0xfd,0xff,0xdd,0x7b,0xff,0xef,0xbf,0x7f,0xff,
++0xff,0xf7,0xff,0xf3,0x5f,0xf7,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,
++0x80,0x40,0x04,0x00,0x81,0x2c,0x04,0x24,0x00,0x02,0x01,0xc8,0x02,0x00,0x02,0x24,
++0x00,0x01,0xb4,0x42,0xdc,0x44,0x02,0x15,0x90,0x02,0x03,0x48,0x39,0x10,0x02,0x24,
++0xa0,0xba,0x00,0x00,0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xfe,0xfc,0xf7,0xf0,0xee,0xb6,0x5d,0xfd,0xf5,0xff,0xdb,0xf7,0x7f,0x7f,0xbe,0xff,
++0xc1,0xfe,0xbf,0xfa,0xfa,0x5f,0xff,0xad,0xff,0xef,0xff,0x7f,0xdf,0x7f,0xfe,0xbf,
++0xb7,0x94,0xbf,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xfb,0xb5,0xff,
++0xef,0x7c,0xeb,0x2b,0x52,0x5b,0x3b,0xda,0xd4,0xf3,0x36,0x96,0xb5,0xbd,0xf1,0xfb,
++0xda,0xee,0xf6,0xfe,0xd3,0x35,0xbd,0xdf,0xad,0xcf,0xef,0x7e,0xcd,0x6b,0xbb,0xdf,
++0xff,0xff,0xfd,0xb0,0xef,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xd3,0x5f,0xf6,
++0xff,0xf6,0xff,0xfd,0xad,0xfd,0xff,0x7f,0xef,0xff,0x6f,0x7f,0xdb,0xf1,0xa5,0xa3,
++0x7f,0x6f,0x6b,0x4f,0xff,0xdb,0xfb,0xcb,0xff,0xf6,0xff,0xf4,0xd7,0xfd,0xbf,0xfe,
++0xdf,0xff,0xd0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdf,0xff,0xff,0xff,
++0x3f,0x7f,0xfc,0xe5,0xff,0x20,0xfe,0xff,0xff,0xdf,0x7f,0xff,0xf1,0x7f,0xff,0xfe,
++0xff,0xf0,0x7c,0x3d,0x4f,0xf3,0xc3,0x3f,0xff,0xff,0x6f,0xc3,0xff,0x0f,0xff,0xff,
++0xaf,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0xb7,0xe0,0x0f,0xff,0xff,0x2b,
++0xff,0x7d,0xbf,0xff,0xdf,0xff,0xff,0xf8,0x9f,0x7f,0xff,0xf1,0x55,0xff,0xff,0xff,
++0xfd,0x7c,0x3c,0xff,0xf3,0xc3,0x3f,0xff,0xff,0xef,0xc3,0xff,0xdf,0xff,0xff,0xff,
++0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x9f,0xbf,0x7f,
++0xf9,0x19,0x47,0x8e,0xe7,0x9f,0x3f,0x17,0xff,0xfc,0x81,0xc1,0x7e,0xf3,0xd9,0xf9,
++0x73,0xdf,0xf4,0x7f,0xfa,0xff,0xff,0xff,0xfb,0x7f,0x77,0xc7,0xff,0xff,0xff,0xf0,
++0x2f,0xff,0xff,0xff,0xfe,0xf5,0xf7,0xff,0xfb,0xff,0xf7,0x3f,0xfc,0xbf,0x3e,0x3f,
++0xec,0xff,0x81,0xaf,0xfe,0x4f,0xf3,0xbb,0xff,0xf0,0x7e,0xff,0x6f,0xff,0x87,0xff,
++0xbb,0xff,0xd5,0xfc,0xff,0x7f,0xfc,0x6f,0xff,0xef,0xe7,0xff,0xff,0xfa,0xf0,0x3f,
++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
++0x00,0x30,0x10,0x60,0x20,0x00,0x08,0x00,0x01,0x20,0x80,0x00,0x10,0x00,0x04,0x00,
++0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x40,0x00,0x08,0x20,0x3c,0xf0,0x6f,0xff,
++0xff,0xff,0xfe,0xf5,0xbf,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x3f,0xff,
++0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xf1,0xdf,0xdf,0xff,0xff,0xff,0x7f,0xdf,0xff,
++0xfd,0xbd,0xff,0xff,0xff,0xfb,0xdf,0xff,0xff,0xff,0xff,0x5b,0xf0,0xff,0xff,0xff,
++0xff,0xfe,0xf0,0xbf,0xbf,0xbf,0xff,0xf7,0xfb,0xff,0xfe,0xee,0xfa,0xff,0xff,0xff,
++0x3d,0x3b,0xff,0xff,0xfe,0xfb,0xf1,0xff,0xbf,0x7b,0xff,0xff,0xef,0xff,0xbf,0xff,
++0xff,0xff,0xff,0xff,0xfe,0xff,0xf7,0xef,0xff,0xfb,0xd0,0xf0,0xdf,0xff,0xff,0xff,
++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x00,0x0b,0x10,0x05,0x01,0x00,0x08,0x00,0x02,
++0x01,0x01,0x00,0x00,0x10,0x01,0xc8,0x08,0x00,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
++0x00,0x80,0x02,0x00,0x00,0x40,0x24,0x80,0x00,0xc1,0xf0,0x3f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xf7,0xfd,0xf7,0xfa,0xef,0xee,0xf9,0xfd,0xff,0xf7,0xfe,0xbf,
++0x1f,0xfd,0x9e,0xfd,0xd1,0xef,0xff,0xf7,0x7f,0x9f,0xff,0xef,0xff,0xf6,0xff,0xfe,
++0xfe,0x7b,0xff,0xbd,0xff,0x7e,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xf7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xdf,0xfd,0xff,0xff,0xdf,0xff,
++0xff,0x5f,0xf1,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xef,0xff,
++0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfb,0xff,0xff,0xef,0xfb,0xfd,
++0xff,0xf1,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf7,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xe7,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xfb,0xff,0xfb,0xf1,
++0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0xff,0x7f,0xff,0xf1,0xff,
++0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x57,0xff,0xfe,0xbf,0xfb,0xf1,0xff,0xff,
++0xfd,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xd7,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd,
++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xef,0x2f,0xf1,0x3c,0xbf,0xbc,
++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff,
++0x01,0xe2,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff };
+diff -u --recursive --new-file linux.prev/drivers/net/yam9600.h linux/drivers/net/yam9600.h
+--- linux.prev/drivers/net/yam9600.h Thu Jan 1 00:00:00 1970
++++ linux/drivers/net/yam9600.h Sat Sep 12 22:03:34 1998
+@@ -0,0 +1,343 @@
++/*
++ *
++ * File yam111.mcs converted to h format by mcs2h
++ *
++ * (C) F6FBB 1998
++ *
++ * Tue Aug 25 20:23:03 1998
++ *
++ */
++
++static unsigned char bits_9600[]= {
++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xfb,0xcb,0xff,0xdb,0xfe,0xf2,
++0xff,0xf6,0xff,0x9c,0xbf,0xfd,0xbf,0xef,0x2e,0x3f,0x6f,0xf1,0xfd,0xb4,0xfd,0xbf,
++0xff,0x6f,0xff,0x6f,0xff,0x0b,0xff,0xdb,0xff,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff,
++0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xfd,0xdf,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,
++0xfb,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0x7f,0xf1,0xff,0xfe,0xff,0xbf,0xbf,
++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xf0,
++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xf7,
++0xff,0xff,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0x7e,0xff,0xff,
++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0xdf,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xef,0xff,0xf3,0xfb,0xfe,0xff,0xf1,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xdf,0xff,0xf0,0x7f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,
++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0x7f,0xff,0xef,
++0xff,0xef,0xff,0x7f,0xef,0xf1,0xff,0xef,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xbd,0xff,0xef,0x7f,0xef,0x7f,0xfb,0xdf,0xd3,0x5a,0xfe,0xd7,0xd6,
++0xf7,0x7f,0xbd,0xf1,0xbb,0x5d,0xd6,0xf7,0xfe,0x96,0xff,0xbd,0xaf,0xad,0xbf,0xef,
++0x7f,0x6b,0x7f,0xfb,0xd6,0xfe,0xf7,0xff,0x10,0xef,0xff,0xff,0xff,0xfe,0xbe,0xef,
++0xff,0xff,0xdb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xbf,0xff,0x7f,0xff,0x7f,
++0xdf,0xdb,0xf1,0xfd,0x35,0xff,0x6f,0xff,0x6f,0xff,0xdb,0xff,0xcb,0xff,0xf6,0xff,
++0xf2,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff,
++0xff,0xf1,0x24,0xf0,0xff,0xff,0xcf,0xef,0x3f,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff,0xff,
++0xf1,0x00,0xf0,0xff,0xff,0xcf,0xdf,0xff,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f,0xff,
++0xff,0xff,0x7d,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfe,0x7f,0xdf,0xff,0xff,0xff,0xf1,
++0xff,0xcf,0xff,0xf3,0xff,0x97,0xff,0xff,0x8f,0xe7,0xff,0xff,0xfc,0x71,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xf7,0xef,0xff,0xff,0xfc,0x7b,0xff,0xf1,0x3f,
++0xff,0xef,0xff,0xcf,0xe3,0xe3,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xbf,0xff,
++0xbf,0xff,0xda,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
++0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0x9f,0xff,
++0xff,0xff,0xf7,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xdb,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xdf,0xbf,0xf1,0xfe,0xfd,0xf7,0xff,
++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xfd,0xf2,
++0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
++0x00,0x00,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x04,0x24,0x00,
++0x40,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0xc0,0xf0,
++0x4f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xbf,0xff,0xff,0x6f,0xff,0xdf,0xff,0xd1,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xdf,0xff,0xfb,0xff,0xfb,0xef,0xff,0xff,0xee,0xff,0xff,0x7f,0xf0,0xdf,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xad,0xff,0x69,0x2a,0xed,0x6b,0xfb,0xdf,0x3a,
++0xdc,0xf4,0x96,0xee,0xb3,0x3d,0x35,0xc1,0xbb,0xdd,0xfe,0xf6,0xfe,0xd6,0xb5,0xad,
++0xbf,0xa5,0xad,0x49,0x2f,0x4f,0x2b,0xda,0x5f,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,
++0xff,0xfe,0xbf,0xff,0xff,0xfb,0x5b,0xf7,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xa5,
++0xf3,0x6f,0xf3,0x6e,0xfa,0x7b,0xd1,0xfd,0xb5,0x77,0x6f,0xe9,0x6f,0xff,0xdb,0xfb,
++0xdb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0x3f,0xfe,0xf7,0xff,0xd0,0x4f,0xff,0xff,0xff,
++0xfe,0xff,0x9f,0xff,0xff,0x0f,0xff,0xc0,0x3f,0x9c,0x03,0xff,0xff,0x8b,0xa5,0xfe,
++0x80,0x3e,0xc2,0xbf,0xac,0xb1,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xa3,
++0xff,0xfd,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0x0f,0xff,0xc0,0x3f,0xd4,0x6b,0xff,0xff,0xdb,0xff,0xfe,0x86,
++0xbf,0xc2,0xbf,0x30,0xa1,0x24,0xff,0xff,0xff,0xff,0xcc,0xff,0x0f,0xff,0xa3,0xff,
++0x05,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xfb,0xc7,0xff,0xc4,0xff,0xff,0x7f,0xff,0xec,0xfe,0x7f,0xdf,0xd8,0xb9,
++0x47,0xfc,0x36,0xc1,0xdf,0xff,0xff,0xf9,0xff,0xf3,0xff,0xf7,0xff,0xfc,0xff,0xfd,
++0x3f,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff,
++0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xbd,0x3f,0xff,0x2b,0xfe,0x2f,0xf5,0xa3,0xfc,
++0x5b,0xfe,0x61,0x9f,0x7f,0xef,0xff,0xff,0xa7,0xfb,0xff,0xff,0xfa,0xfe,0xff,0x33,
++0xf1,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x24,0x04,
++0x00,0x01,0x00,0x80,0x40,0x00,0x08,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x02,0x00,
++0x00,0x00,0x00,0x00,0x01,0x3d,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xfd,0xbd,0xff,0xfd,
++0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f,0xf6,0xef,0xbf,0xf7,0xff,0x73,0xeb,
++0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xfd,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xd9,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0,0xbf,0x7f,0xff,0xff,
++0xff,0x7f,0xff,0xff,0xde,0xff,0xff,0xef,0xdd,0xde,0x77,0xf2,0xfb,0xed,0xe7,0xf1,
++0x73,0xfd,0xfd,0xdf,0xff,0x7d,0xbe,0xdf,0xff,0xfb,0xff,0xef,0xff,0xef,0xff,0xff,
++0xff,0xff,0xff,0xd0,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x02,0x00,0x22,
++0x40,0xc0,0x00,0x00,0x00,0x08,0x00,0x02,0x41,0x02,0x12,0x00,0x21,0x87,0x81,0x00,
++0x00,0x80,0x04,0x0b,0x28,0x01,0xb0,0x00,0x82,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,
++0xf7,0xff,0xfe,0x7f,0xed,0x79,0xff,0xde,0xeb,0x7f,0x74,0xf7,0xf7,0xe1,0xf9,0xff,
++0xf6,0x5f,0x7f,0xff,0xff,0xff,0xd7,0xdb,0xef,0xff,0xbb,0xff,0xff,0xff,0xcc,0xff,
++0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x3d,0xcd,0x49,0x7f,0x6f,
++0x2b,0xba,0x5c,0xd2,0xda,0xf6,0xf3,0x3e,0xf7,0xff,0xbd,0xf1,0xfa,0xdf,0xfe,0xf7,
++0xcc,0xf6,0xbb,0xa5,0xb3,0xad,0xbf,0x6f,0x7d,0x6f,0x6b,0xdb,0xdf,0xbd,0xff,0xfe,
++0xb0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xfb,0xdb,0x57,0xf6,0xfe,0x9f,0xd5,
++0xb7,0xff,0xaf,0xe5,0x3f,0xff,0xff,0x6f,0xff,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0x69,
++0x6c,0xdf,0xda,0xdf,0xcb,0xff,0xf6,0xff,0x76,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0,
++0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfd,0xbd,0x08,0x03,0x89,0x4f,0x5a,
++0x0f,0xf0,0xff,0xf8,0xbf,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xf3,
++0xfa,0xa0,0xf0,0xf2,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xfd,0x00,0x6b,0xff,0xff,0x5a,0x0f,
++0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xb3,0xf5,
++0x50,0xf0,0xf0,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xbc,0xff,0xe4,0xe7,0x71,0xff,0xf9,0xc4,0xf4,
++0x7f,0x7f,0xcf,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xfb,0xf7,0x73,0xbf,0x14,
++0xff,0xe6,0xff,0xff,0xe1,0x7d,0xff,0xff,0xe7,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,
++0xff,0xfe,0xf5,0xff,0xff,0xfe,0xd2,0xfa,0xff,0xc4,0xf4,0x5c,0xbf,0xfa,0xff,0xff,
++0xec,0x7e,0xbf,0xff,0xff,0xff,0xf1,0xff,0xff,0xef,0xff,0xff,0x6b,0xdb,0xff,0xdf,
++0xf9,0xfb,0xbf,0xff,0xf1,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf0,0xbf,0xff,0xff,0xff,
++0xfe,0xf3,0xc0,0x00,0x02,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x80,0x00,
++0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x20,0x00,0x00,0x00,0x00,
++0x01,0x00,0x01,0x00,0x00,0x80,0x02,0x00,0x01,0x3c,0xf0,0x5f,0xff,0xff,0xff,0xfe,
++0xfd,0xbf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0x7f,0xff,0xdf,0xff,0xef,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xc3,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf0,
++0xff,0xdf,0xff,0xff,0xf7,0x23,0xff,0xff,0xfd,0xff,0xef,0xff,0xfe,0x7f,0x7d,0xf7,
++0xfe,0xff,0x7f,0x71,0xff,0xfb,0x7f,0xff,0xff,0xff,0x6e,0xfd,0xf7,0xfd,0xff,0xbf,
++0xff,0xbf,0xf9,0xfd,0xff,0xdf,0xef,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x30,
++0x40,0x01,0x00,0x83,0x00,0x00,0x00,0x0c,0x06,0x08,0x04,0x26,0x26,0x00,0x00,0x06,
++0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x70,0x08,0x80,0x00,0x20,0x01,0x20,
++0x00,0x02,0x00,0x30,0x00,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0x7b,0x3f,0xf7,0xff,0xd7,0xfe,0xfe,0xfb,0xfe,0x3b,0xfe,0xbd,0xff,0x2f,
++0xff,0x71,0xff,0xfb,0x7f,0xe7,0xff,0xf9,0xef,0xff,0xd7,0xfa,0xff,0xb7,0xbb,0xfe,
++0xff,0xff,0x74,0xff,0xf7,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xb5,
++0xbd,0x6f,0x7c,0xeb,0x7f,0xfb,0xdb,0xd3,0x4b,0xee,0xd6,0xf6,0xb7,0xfd,0xac,0xa1,
++0xfb,0xdf,0xfe,0xf7,0xf4,0x96,0xbd,0xb4,0xc5,0xa5,0xaf,0x6f,0x69,0x4f,0x7f,0xba,
++0xdb,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,
++0xf6,0xff,0xf6,0xff,0xbd,0xbf,0xa5,0xbf,0xff,0x7d,0x7f,0xef,0xff,0xfb,0xf1,0xfd,
++0xbf,0xff,0x6f,0xff,0x6b,0x7a,0xdb,0xff,0xdb,0xdf,0xf6,0xfe,0xb6,0xfd,0xfd,0xbf,
++0xfe,0xf7,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf4,0x2f,0xff,
++0xfc,0x43,0x6b,0xff,0xff,0xff,0x0d,0xff,0xfc,0x33,0x3f,0xf0,0x5f,0xf1,0xff,0xff,
++0xff,0xff,0xf9,0xde,0xf0,0x4c,0xfe,0x77,0xaf,0xff,0xff,0xef,0xff,0xf0,0xff,0xdb,
++0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xfe,0xf7,0xff,0xf0,0x2f,0xff,0xfd,
++0x43,0x7f,0xff,0xff,0xf1,0x0f,0xff,0xfc,0x33,0x3f,0xff,0xaf,0xf1,0xff,0xff,0xff,
++0xff,0xf6,0xd7,0xff,0xbc,0xfd,0xbd,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,
++0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xfb,0xf1,
++0xbf,0xff,0xf9,0xfd,0xcf,0xf2,0x70,0xff,0x1f,0x9f,0xf3,0xf1,0xff,0xff,0xff,0xff,
++0xfc,0xf7,0xff,0x13,0x9f,0xfc,0xff,0xff,0x84,0xf7,0xff,0xff,0x47,0xff,0xff,0xff,
++0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xf1,0xfc,0xff,0xfe,0xfe,0x79,
++0x3f,0xff,0x1d,0x46,0xcf,0xff,0xcf,0xfc,0x7b,0xff,0xf1,0xff,0xff,0xff,0xff,0xed,
++0xf3,0xab,0xff,0xcb,0xff,0xf8,0xff,0xfc,0xf5,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,
++0x8f,0xff,0xff,0xff,0xfe,0xf3,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
++0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x20,
++0x0c,0x00,0x00,0x04,0x01,0x00,0x01,0x00,0x00,0x80,0x00,0x00,0x01,0x3c,0xf0,0x7f,
++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff,
++0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xef,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,
++0xff,0xdf,0xff,0xff,0xfb,0xf7,0x7f,0xff,0xfe,0xff,0xff,0xbf,0xdb,0xf0,0xff,0xff,
++0xff,0xff,0xfe,0xf0,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0x7f,0xf7,0xff,
++0xbf,0xbf,0xcf,0xff,0xff,0xff,0x3e,0xf1,0x7f,0xff,0xff,0xef,0xff,0xff,0xff,0xfe,
++0xff,0xfd,0xff,0xbf,0xbd,0xfe,0xff,0xfb,0xf7,0xdf,0xfb,0xd0,0xf0,0x9f,0xff,0xff,
++0xff,0xfe,0xf8,0x30,0x20,0x00,0x40,0x01,0x80,0xc0,0x30,0x00,0x00,0x20,0x00,0x10,
++0x50,0x88,0x20,0x00,0x00,0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
++0x00,0x00,0x01,0x80,0x08,0x00,0x00,0xa0,0x00,0x10,0xc1,0xf0,0xef,0xff,0xff,0xff,
++0xfe,0xfd,0xef,0x7f,0xff,0xff,0xbf,0xff,0xf7,0xff,0xef,0xfb,0xfd,0x77,0xef,0xbf,
++0xf7,0x7f,0xff,0xff,0xbf,0xd1,0x7f,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xaf,0xff,
++0xdf,0xf7,0xfb,0xff,0xfd,0xff,0xfc,0xff,0xfd,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x3f,0xff,0xff,0xff,0xfe,0xdd,0xff,
++0xff,0xff,0xa5,0xfd,0x6f,0x7d,0x6d,0x7f,0x52,0xdf,0x5a,0x4b,0xee,0xb6,0xee,0xf2,
++0xbb,0xac,0xa1,0x5b,0x4d,0xd6,0xf7,0xfe,0xb2,0xbd,0x35,0xb5,0xb5,0xdd,0x6f,0x7f,
++0xe9,0x5f,0x52,0xdf,0xbd,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
++0xff,0xdb,0xfe,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xb5,0xbf,0xf9,0x7f,0x6f,0xff,
++0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0x69,0x7f,0xdb,0xff,0xd3,0xff,0xf6,0xfe,0xf2,
++0xff,0xad,0xbf,0xff,0xff,0xff,0xd0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,
++0x30,0x0f,0xff,0xff,0xfd,0x6b,0xca,0xff,0xf0,0x0f,0xd6,0xbf,0xcf,0x3f,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xca,0xfe,0xbf,0xff,0xf0,0x05,0xaf,0x0f,0xff,0xfc,0xf0,0xcf,
++0xf0,0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0x30,
++0x0f,0xff,0xff,0xfc,0x3f,0xca,0xff,0x0f,0x0f,0xd6,0xbf,0xff,0xff,0xf5,0x5f,0xf1,
++0xff,0x8b,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xfc,0xf0,0xcf,0xf0,
++0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xcf,0xff,
++0xff,0xbf,0x9f,0x3f,0xfe,0xfc,0xff,0x4f,0xff,0xff,0xff,0xff,0xff,0xf7,0xf1,0xff,
++0xdf,0xfe,0x7e,0x3f,0x9f,0xf4,0xfc,0x7f,0xfc,0xff,0xff,0x3f,0xff,0x3f,0xfe,0x3f,
++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfb,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xbf,0xfb,0xff,0xf8,0xed,0xff,0x8f,0xff,0xbb,0xff,0xb1,0xf3,0xef,
++0x8f,0xf7,0xff,0xff,0xdb,0xff,0xff,0xff,0xef,0xbf,0xfd,0x79,0xbf,0xbf,0xff,0xff,
++0xff,0xfb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x04,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x04,0x08,0x08,0x01,0x01,0x00,0x90,
++0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x00,0x01,
++0x3c,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0x9f,0xff,0xaf,0xdf,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,
++0xbf,0xef,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xbf,0xff,0xff,0xff,0xc3,
++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xfd,0xff,0xff,0xff,0xfb,0xff,0xbb,0xff,
++0xff,0xff,0x7f,0xf6,0xff,0x7f,0xfb,0xfd,0xed,0xff,0xf1,0xff,0xfe,0x7f,0xff,0xff,
++0xff,0x5f,0xff,0xf7,0xff,0x7e,0xff,0xfd,0xff,0xef,0xff,0xff,0xff,0xef,0xf0,0xf0,
++0x8f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x80,0x00,0x04,0x00,0x00,0x40,0x02,0x00,0x03,
++0x00,0x05,0x04,0x20,0x00,0x00,0x01,0xd0,0x00,0x81,0x00,0x20,0x04,0x04,0x00,0x00,
++0x81,0x04,0x08,0x80,0x10,0x00,0xc0,0x00,0x00,0x00,0x20,0x00,0x08,0xc1,0xf0,0x6f,
++0xff,0xff,0xff,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xf3,0xfd,0xff,0xed,0xfc,
++0xff,0xff,0x9f,0xfb,0xfd,0xff,0xff,0xff,0xf1,0xff,0xff,0x7f,0xfb,0x3e,0xff,0x9f,
++0xff,0xff,0xff,0xff,0xfd,0xf9,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0x6f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xfd,0xbd,0xff,0xef,0x7c,0xeb,0x7f,0xfb,0xdb,0xfa,0xdc,
++0xee,0xf7,0xf6,0xd7,0xf5,0x2d,0xa1,0xbb,0xdd,0xee,0xf7,0x54,0xf7,0xfb,0x2c,0xb5,
++0xb4,0xbd,0x6b,0x6f,0xef,0x6f,0xbb,0xdf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,
++0xfe,0xbf,0xff,0xff,0xff,0xfb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xff,0xbf,0xef,
++0x6f,0xff,0x6f,0xfa,0xdb,0xf1,0xc5,0xbd,0xf5,0x6f,0xff,0x6f,0xca,0xdb,0xff,0xdb,
++0xfb,0xf6,0x97,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x9f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0x7f,0xff,0xff,0xe7,0x63,0xff,0xff,
++0xff,0xfc,0x77,0xdf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff,
++0xc3,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xfc,0xff,0xcf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff,0xc3,
++0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xbf,0xff,0xca,0xff,0x9f,0xff,0xfa,0xb9,0xe7,
++0x9f,0xf3,0x81,0xff,0xff,0xfc,0x73,0xd7,0xff,0xff,0x77,0xff,0xfd,0xff,0xfc,0xff,
++0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,
++0xff,0xf7,0xde,0xff,0xfe,0x7e,0xff,0xbf,0xff,0xbf,0xf1,0xb3,0xff,0xff,0xe3,0xfb,
++0xff,0xe1,0x1f,0x7f,0xff,0xf8,0x78,0xff,0xfb,0x1e,0xff,0xf7,0xfe,0xe7,0xff,0xff,
++0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x04,0x00,
++0x01,0x80,0x40,0x40,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
++0x80,0x00,0x00,0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xf7,0xf1,
++0xfd,0xff,0xff,0xff,0xdf,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
++0xff,0xff,0xff,0xdb,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xdf,0xff,0xff,0x7f,
++0xff,0xff,0xff,0xbe,0xd7,0xff,0xed,0xbd,0x7e,0xbf,0xfe,0xf6,0x7f,0xbf,0x71,0xff,
++0xff,0xda,0xff,0xf9,0xff,0xbf,0x7f,0xfe,0xff,0x6f,0x7f,0xff,0xff,0xff,0xff,0xff,
++0x7f,0xff,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x42,0x00,0x00,0x00,0x00,
++0x80,0xc1,0x00,0x00,0x90,0x00,0xc4,0x00,0x00,0x12,0x20,0x43,0x22,0x81,0x84,0x00,
++0x00,0x14,0x00,0x01,0x00,0x08,0x80,0x00,0x02,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
++0x10,0xc1,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfd,0xff,0xff,0xdd,0xfe,0xff,
++0xb6,0x76,0xe5,0xbc,0xf9,0xf7,0xaf,0x5f,0xbf,0xfc,0xdf,0xcf,0xf1,0xff,0xef,0x79,
++0xff,0xbd,0xff,0xef,0xff,0xff,0xf7,0x6f,0x5f,0xff,0xff,0xfd,0xef,0xef,0xbf,0xff,
++0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf0,0xff,0xff,0xff,0xff,0xfe,0xdb,0xff,0xff,0xfd,0x2d,0xff,0x69,0x2a,0xef,0x77,
++0xbb,0xdd,0x5a,0xdf,0xf6,0xf6,0xd6,0xf7,0x7d,0xbd,0xd1,0xb2,0x4a,0xd6,0xb2,0xbe,
++0x97,0xf5,0xbd,0xb3,0xad,0xff,0xef,0x7f,0x69,0x6b,0xfb,0xdf,0xff,0xff,0xff,0xf0,
++0x2f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0x9f,0xd4,0xbf,
++0xed,0xaf,0xff,0x6b,0x6f,0xf7,0xff,0xdd,0xdb,0x31,0xfd,0xbf,0xff,0x6f,0x7f,0xff,
++0xff,0xdb,0xff,0xcb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x8f,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff,
++0xa5,0xff,0xff,0xff,0xdf,0xb7,0xff,0xff,0xf1,0xff,0xff,0xff,0xf7,0xe9,0x6a,0xbf,
++0xff,0xff,0xfd,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xaf,0xf0,0x4f,0xff,
++0xff,0xff,0xfe,0xfe,0xdf,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff,0xa5,
++0xff,0xff,0xff,0xc0,0x37,0xff,0xff,0xf1,0x99,0x8e,0xdc,0x7f,0xe9,0x6a,0xbf,0xff,
++0xf0,0x0f,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0x07,0xff,0xc0,0xbe,0xff,0xff,0xcf,0xef,0x9f,0xff,
++0xff,0xfb,0xff,0xe7,0xff,0xff,0xa1,0xe3,0xce,0x3c,0x58,0x3f,0xf3,0xff,0xfd,0xef,
++0xf9,0xff,0xff,0xf7,0xf1,0x7f,0xff,0xcb,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,
++0xfe,0xf5,0x7f,0xff,0xf0,0xff,0xfe,0xff,0xc4,0x75,0xe7,0xb9,0xff,0xff,0xff,0xef,
++0xff,0xc7,0x37,0x3b,0xff,0xf0,0x13,0x9e,0x0f,0xf4,0xff,0xfe,0xfb,0xff,0xff,0xf9,
++0xfc,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xef,0xff,0xff,0xff,0xfe,
++0xf3,0xc0,0x01,0x00,0x00,0x02,0x00,0x02,0x22,0x00,0x00,0xc0,0x40,0x00,0x40,0x00,
++0x04,0x08,0x04,0x0a,0x01,0x01,0x10,0x20,0x20,0x00,0x00,0x04,0x08,0x08,0x04,0x00,
++0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x3c,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xfd,
++0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0xcf,0x9d,0xff,
++0xff,0xf7,0xfd,0xf1,0xff,0xff,0xff,0xee,0xbf,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xff,
++0xff,0xff,0xf7,0xf7,0xff,0xff,0xfe,0xbf,0xf7,0xff,0xff,0x5b,0xff,0xbf,0xf7,0xff,
++0xfd,0x7f,0x71,0xfd,0xff,0xed,0xf7,0xfe,0xef,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
++0xff,0xff,0xef,0xff,0x7f,0xff,0xd0,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf8,0x30,0x11,
++0x00,0x48,0x60,0x40,0x82,0x60,0x24,0x60,0x00,0xcc,0x00,0x80,0x04,0x01,0x00,0x00,
++0x14,0x01,0x0c,0x04,0x00,0x30,0x00,0x00,0x00,0x08,0x08,0x00,0x01,0x00,0xc2,0x00,
++0x00,0x02,0x00,0x80,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xf7,0x7b,0xff,0xf3,0xeb,0xbf,0xff,0xf7,0xff,0xff,0xff,0xe7,0x5d,0x3f,0xff,0xf6,
++0xd1,0xfd,0xff,0xeb,0xf7,0x3d,0xff,0xff,0xff,0x5f,0xff,0x7f,0x7f,0xf3,0xff,0xff,
++0xef,0xfd,0xbf,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xb5,0xdf,
++0x6f,0x7d,0x69,0x7f,0xfb,0xdf,0x52,0x5f,0xf6,0xf7,0xfe,0xf6,0xf3,0xbd,0xb1,0xda,
++0xcd,0xfe,0xf6,0xee,0xd2,0xbd,0xa5,0xaf,0xbd,0xff,0x6f,0x7c,0xeb,0x2b,0xfa,0xda,
++0xff,0xfe,0xdf,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,
++0xff,0xf6,0xff,0xbd,0xbf,0xcd,0xbf,0xeb,0x6f,0xf7,0x6f,0xdf,0xdb,0x51,0xfd,0xbd,
++0xff,0x6f,0xff,0x6f,0xfb,0x5b,0xff,0xdb,0xff,0xf6,0xfe,0xf6,0xfd,0xfd,0xbf,0xfe,
++0xf7,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfa,0x50,0xff,0xff,0xff,
++0xf0,0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0xfc,0xff,0xff,
++0xf7,0xdb,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff,
++0xaf,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xa0,0xff,0xff,0xff,0xf0,
++0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,
++0xf3,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff,0xff,
++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0x9f,0xf0,0x7f,
++0xff,0xf9,0xfc,0x4f,0xf3,0xff,0x27,0xeb,0xff,0xfc,0x81,0xfc,0x7f,0xfe,0x7b,0xff,
++0xf7,0xff,0x12,0x7f,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,
++0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xdf,0xfe,0xff,0xfc,0x7e,0x7f,0xbf,
++0xff,0xff,0xaf,0xef,0xff,0xdf,0xdf,0xfb,0xff,0xf1,0xc3,0xfe,0x6f,0xf1,0xcf,0x3f,
++0xfb,0xff,0xff,0xcf,0xfe,0xff,0xff,0xfe,0x7f,0xbf,0xff,0xff,0xbf,0xfa,0xf0,0xdf,
++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
++0x20,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x02,0x80,0x00,0x02,0x3c,0xf0,0x2f,0xff,
++0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xf1,0xff,0x7f,0xff,0xff,0xff,0xff,0xef,0xff,
++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x2f,0xff,0xff,
++0xff,0xfe,0xf0,0xff,0xff,0xff,0xfb,0xff,0xbf,0xff,0xff,0xff,0xff,0xf7,0xbf,0xfb,
++0xff,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xf7,0xbf,0xfb,0xff,0xff,0xff,0x7f,0xde,0xff,
++0xff,0xff,0xff,0xff,0xff,0xed,0xf7,0xff,0xff,0x7f,0xd0,0xf0,0x3f,0xff,0xff,0xff,
++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x80,
++0x20,0x01,0x01,0x92,0x00,0x01,0x01,0x00,0xe0,0x1c,0x60,0x20,0x30,0x08,0x08,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xc1,0xf0,0x6f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xdb,0xfe,0xff,0xff,0xdf,0xff,0xfc,0x7f,0xfb,0xbf,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xf6,0xff,0xf7,0x7e,0x3f,0xff,0x7f,0xff,0xff,0xff,0xf7,
++0xff,0xff,0xff,0xed,0xff,0xdf,0xff,0xb7,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xbf,0xff,0xdf,
++0x57,0xef,0xf1,0xfd,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfb,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xdf,0xff,
++0xff,0xf1,0xfd,0xff,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xf7,0xfd,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0x6f,0xff,0xfe,0xbf,0xff,0xf1,0xff,
++0xf7,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
++0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x57,0xff,0xfd,0xbf,0xff,0xf1,0xff,0xef,
++0xfe,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,
++0xde,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd,
++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xe7,0x2f,0xf1,0x3c,0xbf,0xfd,
++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff,
++0x02,0x01,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff };
+diff -u --recursive --new-file linux.prev/drivers/net/yam.c linux/drivers/net/yam.c
+--- linux.prev/drivers/net/yam.c Thu Jan 1 00:00:00 1970
++++ linux/drivers/net/yam.c Sat Sep 12 22:54:35 1998
+@@ -0,0 +1,1330 @@
++/*****************************************************************************/
++
++/*
++ * yam.c -- YAM radio modem driver.
++ *
++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr)
++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You 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.
++ *
++ * Please note that the GPL allows you to use the driver, NOT the radio.
++ * In order to use the radio, you need a license from the communications
++ * authority of your country.
++ *
++ *
++ * History:
++ * 0.0 F1OAT 06.06.98 Begin of work with baycom.c source code V 0.3
++ * 0.1 F1OAT 07.06.98 Add timer polling routine for channel arbitration
++ * 0.2 F6FBB 08.06.98 Added delay after FPGA programming
++ * 0.3 F6FBB 29.07.98 Delayed PTT implementation for dupmode=2
++ * 0.4 F6FBB 30.07.98 Added TxTail, Slottime and Persistance
++ * 0.5 F6FBB 01.08.98 Shared IRQs, /proc/net and network statistics
++ * 0.6 F6FBB 25.08.98 Added 1200Bds format
++ * 0.7 F6FBB 12.09.98 Added to the kernel configuration
++ */
++
++/*****************************************************************************/
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/net.h>
++#include <linux/in.h>
++#include <linux/if.h>
++#include <linux/malloc.h>
++#include <linux/errno.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++#include <asm/system.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++
++#include <linux/netdevice.h>
++#include <linux/if_arp.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
++/* prototypes for ax25_encapsulate and ax25_rebuild_header */
++#include <net/ax25.h>
++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */
++
++/* make genksyms happy */
++#include <linux/ip.h>
++#include <linux/udp.h>
++#include <linux/tcp.h>
++#include <linux/net_alias.h>
++
++#include <linux/kernel.h>
++#include <linux/proc_fs.h>
++
++#include <linux/yam.h>
++#include "yam9600.h"
++#include "yam1200.h"
++
++/* --------------------------------------------------------------------- */
++
++/*
++ * currently this module is supposed to support both module styles, i.e.
++ * the old one present up to about 2.1.9, and the new one functioning
++ * starting with 2.1.21. The reason is I have a kit allowing to compile
++ * this module also under 2.0.x which was requested by several people.
++ * This will go in 2.2
++ */
++#include <linux/version.h>
++
++#if LINUX_VERSION_CODE >= 0x20100
++#include <asm/uaccess.h>
++#else
++#include <asm/segment.h>
++#include <linux/mm.h>
++
++#undef put_user
++#undef get_user
++
++#define put_user(x,ptr) ({ __put_user((unsigned long)(x),(ptr),sizeof(*(ptr))); 0; })
++#define get_user(x,ptr) ({ x = ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr)))); 0; })
++
++extern inline int copy_from_user(void *to, const void *from, unsigned long n)
++{
++ int i = verify_area(VERIFY_READ, from, n);
++ if (i)
++ return i;
++ memcpy_fromfs(to, from, n);
++ return 0;
++}
++
++extern inline int copy_to_user(void *to, const void *from, unsigned long n)
++{
++ int i = verify_area(VERIFY_WRITE, to, n);
++ if (i)
++ return i;
++ memcpy_tofs(to, from, n);
++ return 0;
++}
++#endif
++
++#if LINUX_VERSION_CODE < 0x20115
++extern __inline__ void dev_init_buffers(struct device *dev)
++{
++ int i;
++ for(i=0;i<DEV_NUMBUFFS;i++)
++ {
++ skb_queue_head_init(&dev->buffs[i]);
++ }
++}
++#endif
++
++#if LINUX_VERSION_CODE >= 0x20123
++#include <linux/init.h>
++#else
++#define __init
++#define __initdata
++#define __initfunc(x) x
++#endif
++
++/* --------------------------------------------------------------------- */
++
++static const char yam_drvname[] = "yam";
++static const char yam_drvinfo[] = KERN_INFO "yam: (C) 1998 Frederic Rible F1OAT\n"
++KERN_INFO "yam: version 0.7 compiled " __TIME__ " " __DATE__ "\n";
++
++/* --------------------------------------------------------------------- */
++
++#define YAM_9600 1
++#define YAM_1200 2
++
++#define NR_PORTS 4
++#define YAM_MAGIC 0xF10A7654
++
++/* Transmitter states */
++
++#define TX_OFF 0
++#define TX_HEAD 1
++#define TX_DATA 2
++#define TX_CRC1 3
++#define TX_CRC2 4
++#define TX_TAIL 5
++
++#define YAM_MAX_FRAME 1024
++
++#define DEFAULT_BITRATE 9600 /* bps */
++#define DEFAULT_HOLDD 10 /* sec */
++#define DEFAULT_TXD 300 /* ms */
++#define DEFAULT_TXTAIL 10 /* ms */
++#define DEFAULT_SLOT 100 /* ms */
++#define DEFAULT_PERS 64 /* 0->255 */
++
++struct yam_port {
++ int magic;
++ int bitrate;
++ int baudrate;
++ int iobase;
++ int irq;
++ int dupmode;
++ char name[16];
++
++ struct device dev;
++
++ /* Stats section */
++
++#if LINUX_VERSION_CODE < 0x20119
++ struct enet_statistics stats;
++#else
++ struct net_device_stats stats;
++#endif
++ int nb_rxint;
++ int nb_mdint;
++
++ /* Parameters section */
++
++ int txd; /* tx delay */
++ int holdd; /* duplex ptt delay */
++ int txtail; /* txtail delay */
++ int slot; /* slottime */
++ int pers; /* persistence */
++
++ /* Tx section */
++
++ int tx_state;
++ int tx_count;
++ int slotcnt;
++ unsigned char tx_buf[YAM_MAX_FRAME];
++ int tx_len;
++ int tx_crcl, tx_crch;
++ struct sk_buff_head send_queue; /* Packets awaiting transmission */
++
++ /* Rx section */
++
++ int dcd;
++ unsigned char rx_buf[YAM_MAX_FRAME];
++ int rx_len;
++ int rx_crcl, rx_crch;
++};
++
++struct yam_mcs {
++ unsigned char bits[YAM_FPGA_SIZE];
++ int bitrate;
++ struct yam_mcs *next;
++};
++
++static struct yam_port yam_ports[NR_PORTS];
++
++static struct yam_mcs *yam_data = NULL;
++
++static unsigned irqs[16];
++
++static char ax25_bcast[7] =
++{'Q' << 1, 'S' << 1, 'T' << 1, ' ' << 1, ' ' << 1, ' ' << 1, '0' << 1};
++static char ax25_test[7] =
++{'L' << 1, 'I' << 1, 'N' << 1, 'U' << 1, 'X' << 1, ' ' << 1, '1' << 1};
++
++static struct timer_list yam_timer;
++
++/* --------------------------------------------------------------------- */
++
++#define RBR(iobase) (iobase+0)
++#define THR(iobase) (iobase+0)
++#define IER(iobase) (iobase+1)
++#define IIR(iobase) (iobase+2)
++#define FCR(iobase) (iobase+2)
++#define LCR(iobase) (iobase+3)
++#define MCR(iobase) (iobase+4)
++#define LSR(iobase) (iobase+5)
++#define MSR(iobase) (iobase+6)
++#define SCR(iobase) (iobase+7)
++#define DLL(iobase) (iobase+0)
++#define DLM(iobase) (iobase+1)
++
++#define YAM_EXTENT 8
++
++/* Interrupt Identification Register Bit Masks */
++#define IIR_NOPEND 1
++#define IIR_MSR 0
++#define IIR_TX 2
++#define IIR_RX 4
++#define IIR_LSR 6
++#define IIR_TIMEOUT 12 /* Fifo mode only */
++
++#define IIR_MASK 0x0F
++
++/* Interrupt Enable Register Bit Masks */
++#define IER_RX 1 /* enable rx interrupt */
++#define IER_TX 2 /* enable tx interrupt */
++#define IER_LSR 4 /* enable line status interrupts */
++#define IER_MSR 8 /* enable modem status interrupts */
++
++/* Modem Control Register Bit Masks */
++#define MCR_DTR 0x01 /* DTR output */
++#define MCR_RTS 0x02 /* RTS output */
++#define MCR_OUT1 0x04 /* OUT1 output (not accessible in RS232) */
++#define MCR_OUT2 0x08 /* Master Interrupt enable (must be set on PCs) */
++#define MCR_LOOP 0x10 /* Loopback enable */
++
++/* Modem Status Register Bit Masks */
++#define MSR_DCTS 0x01 /* Delta CTS input */
++#define MSR_DDSR 0x02 /* Delta DSR */
++#define MSR_DRIN 0x04 /* Delta RI */
++#define MSR_DDCD 0x08 /* Delta DCD */
++#define MSR_CTS 0x10 /* CTS input */
++#define MSR_DSR 0x20 /* DSR input */
++#define MSR_RING 0x40 /* RI input */
++#define MSR_DCD 0x80 /* DCD input */
++
++/* line status register bit mask */
++#define LSR_RXC 0x01
++#define LSR_OE 0x02
++#define LSR_PE 0x04
++#define LSR_FE 0x08
++#define LSR_BREAK 0x10
++#define LSR_THRE 0x20
++#define LSR_TSRE 0x40
++
++/* Line Control Register Bit Masks */
++#define LCR_DLAB 0x80
++#define LCR_BREAK 0x40
++#define LCR_PZERO 0x28
++#define LCR_PEVEN 0x18
++#define LCR_PODD 0x08
++#define LCR_STOP1 0x00
++#define LCR_STOP2 0x04
++#define LCR_BIT5 0x00
++#define LCR_BIT6 0x02
++#define LCR_BIT7 0x01
++#define LCR_BIT8 0x03
++
++/* YAM Modem <-> UART Port mapping */
++
++#define TX_RDY MSR_DCTS /* transmitter ready to send */
++#define RX_DCD MSR_DCD /* carrier detect */
++#define RX_FLAG MSR_RING /* hdlc flag received */
++#define FPGA_DONE MSR_DSR /* FPGA is configured */
++#define PTT_ON (MCR_RTS|MCR_OUT2) /* activate PTT */
++#define PTT_OFF (MCR_DTR|MCR_OUT2) /* release PTT */
++
++#define ENABLE_RXINT IER_RX /* enable uart rx interrupt during rx */
++#define ENABLE_TXINT IER_MSR /* enable uart ms interrupt during tx */
++#define ENABLE_RTXINT (IER_RX|IER_MSR) /* full duplex operations */
++
++#define MIN(a, b) (((a) < (b)) ? (a) : (b))
++#define MAX(a, b) (((a) > (b)) ? (a) : (b))
++
++/*************************************************************************
++* CRC Tables
++************************************************************************/
++
++static const unsigned char chktabl[256]=
++{ 0x00,0x89,0x12,0x9b,0x24,0xad,0x36,0xbf,0x48,0xc1,0x5a,0xd3,0x6c,0xe5,0x7e,
++ 0xf7,0x81,0x08,0x93,0x1a,0xa5,0x2c,0xb7,0x3e,0xc9,0x40,0xdb,0x52,0xed,0x64,
++ 0xff,0x76,0x02,0x8b,0x10,0x99,0x26,0xaf,0x34,0xbd,0x4a,0xc3,0x58,0xd1,0x6e,
++ 0xe7,0x7c,0xf5,0x83,0x0a,0x91,0x18,0xa7,0x2e,0xb5,0x3c,0xcb,0x42,0xd9,0x50,
++ 0xef,0x66,0xfd,0x74,0x04,0x8d,0x16,0x9f,0x20,0xa9,0x32,0xbb,0x4c,0xc5,0x5e,
++ 0xd7,0x68,0xe1,0x7a,0xf3,0x85,0x0c,0x97,0x1e,0xa1,0x28,0xb3,0x3a,0xcd,0x44,
++ 0xdf,0x56,0xe9,0x60,0xfb,0x72,0x06,0x8f,0x14,0x9d,0x22,0xab,0x30,0xb9,0x4e,
++ 0xc7,0x5c,0xd5,0x6a,0xe3,0x78,0xf1,0x87,0x0e,0x95,0x1c,0xa3,0x2a,0xb1,0x38,
++ 0xcf,0x46,0xdd,0x54,0xeb,0x62,0xf9,0x70,0x08,0x81,0x1a,0x93,0x2c,0xa5,0x3e,
++ 0xb7,0x40,0xc9,0x52,0xdb,0x64,0xed,0x76,0xff,0x89,0x00,0x9b,0x12,0xad,0x24,
++ 0xbf,0x36,0xc1,0x48,0xd3,0x5a,0xe5,0x6c,0xf7,0x7e,0x0a,0x83,0x18,0x91,0x2e,
++ 0xa7,0x3c,0xb5,0x42,0xcb,0x50,0xd9,0x66,0xef,0x74,0xfd,0x8b,0x02,0x99,0x10,
++ 0xaf,0x26,0xbd,0x34,0xc3,0x4a,0xd1,0x58,0xe7,0x6e,0xf5,0x7c,0x0c,0x85,0x1e,
++ 0x97,0x28,0xa1,0x3a,0xb3,0x44,0xcd,0x56,0xdf,0x60,0xe9,0x72,0xfb,0x8d,0x04,
++ 0x9f,0x16,0xa9,0x20,0xbb,0x32,0xc5,0x4c,0xd7,0x5e,0xe1,0x68,0xf3,0x7a,0x0e,
++ 0x87,0x1c,0x95,0x2a,0xa3,0x38,0xb1,0x46,0xcf,0x54,0xdd,0x62,0xeb,0x70,0xf9,
++ 0x8f,0x06,0x9d,0x14,0xab,0x22,0xb9,0x30,0xc7,0x4e,0xd5,0x5c,0xe3,0x6a,0xf1,
++ 0x78};
++static const unsigned char chktabh[256]=
++{ 0x00,0x11,0x23,0x32,0x46,0x57,0x65,0x74,0x8c,0x9d,0xaf,0xbe,0xca,0xdb,0xe9,
++ 0xf8,0x10,0x01,0x33,0x22,0x56,0x47,0x75,0x64,0x9c,0x8d,0xbf,0xae,0xda,0xcb,
++ 0xf9,0xe8,0x21,0x30,0x02,0x13,0x67,0x76,0x44,0x55,0xad,0xbc,0x8e,0x9f,0xeb,
++ 0xfa,0xc8,0xd9,0x31,0x20,0x12,0x03,0x77,0x66,0x54,0x45,0xbd,0xac,0x9e,0x8f,
++ 0xfb,0xea,0xd8,0xc9,0x42,0x53,0x61,0x70,0x04,0x15,0x27,0x36,0xce,0xdf,0xed,
++ 0xfc,0x88,0x99,0xab,0xba,0x52,0x43,0x71,0x60,0x14,0x05,0x37,0x26,0xde,0xcf,
++ 0xfd,0xec,0x98,0x89,0xbb,0xaa,0x63,0x72,0x40,0x51,0x25,0x34,0x06,0x17,0xef,
++ 0xfe,0xcc,0xdd,0xa9,0xb8,0x8a,0x9b,0x73,0x62,0x50,0x41,0x35,0x24,0x16,0x07,
++ 0xff,0xee,0xdc,0xcd,0xb9,0xa8,0x9a,0x8b,0x84,0x95,0xa7,0xb6,0xc2,0xd3,0xe1,
++ 0xf0,0x08,0x19,0x2b,0x3a,0x4e,0x5f,0x6d,0x7c,0x94,0x85,0xb7,0xa6,0xd2,0xc3,
++ 0xf1,0xe0,0x18,0x09,0x3b,0x2a,0x5e,0x4f,0x7d,0x6c,0xa5,0xb4,0x86,0x97,0xe3,
++ 0xf2,0xc0,0xd1,0x29,0x38,0x0a,0x1b,0x6f,0x7e,0x4c,0x5d,0xb5,0xa4,0x96,0x87,
++ 0xf3,0xe2,0xd0,0xc1,0x39,0x28,0x1a,0x0b,0x7f,0x6e,0x5c,0x4d,0xc6,0xd7,0xe5,
++ 0xf4,0x80,0x91,0xa3,0xb2,0x4a,0x5b,0x69,0x78,0x0c,0x1d,0x2f,0x3e,0xd6,0xc7,
++ 0xf5,0xe4,0x90,0x81,0xb3,0xa2,0x5a,0x4b,0x79,0x68,0x1c,0x0d,0x3f,0x2e,0xe7,
++ 0xf6,0xc4,0xd5,0xa1,0xb0,0x82,0x93,0x6b,0x7a,0x48,0x59,0x2d,0x3c,0x0e,0x1f,
++ 0xf7,0xe6,0xd4,0xc5,0xb1,0xa0,0x92,0x83,0x7b,0x6a,0x58,0x49,0x3d,0x2c,0x1e,
++ 0x0f};
++
++/*************************************************************************
++* FPGA functions
++************************************************************************/
++
++static void delay(int ms)
++{
++ unsigned long timeout = jiffies + ((ms*HZ)/1000);
++ while (jiffies < timeout);
++}
++
++/*
++ * reset FPGA
++ */
++
++static void fpga_reset(int iobase)
++{
++ outb(0, IER(iobase));
++ outb(LCR_DLAB|LCR_BIT5, LCR(iobase));
++ outb(1, DLL(iobase));
++ outb(0, DLM(iobase));
++
++ outb(LCR_BIT5, LCR(iobase));
++ inb(LSR(iobase));
++ inb(MSR(iobase));
++ /* turn off FPGA supply voltage */
++ outb(MCR_OUT1|MCR_OUT2, MCR(iobase));
++ delay(100);
++ /* turn on FPGA supply voltage again */
++ outb(MCR_DTR|MCR_RTS|MCR_OUT1|MCR_OUT2, MCR(iobase));
++ delay(100);
++}
++
++/*
++ * send one byte to FPGA
++ */
++
++static int fpga_write(int iobase, unsigned char wrd)
++{
++ unsigned char bit;
++ int k;
++ unsigned long timeout = jiffies + HZ/10;
++
++ for (k=0; k<8; k++) {
++ bit = (wrd&0x80)?(MCR_RTS|MCR_DTR):MCR_DTR;
++ outb(bit|MCR_OUT1|MCR_OUT2, MCR(iobase));
++ wrd <<=1 ;
++ outb(0xfc, THR(iobase));
++ while ((inb(LSR(iobase)) & LSR_TSRE) == 0)
++ if (jiffies > timeout) return -1;
++ }
++
++ return 0;
++}
++
++#ifdef MODULE
++static void free_mcs(void)
++{
++ struct yam_mcs *p;
++
++ while (yam_data) {
++ p = yam_data;
++ yam_data = yam_data->next;
++ kfree(p);
++ }
++}
++#endif
++
++static unsigned char *add_mcs(unsigned char *bits, int bitrate)
++{
++ struct yam_mcs *p;
++
++ /* If it already exists, replace the bit data */
++ p = yam_data;
++ while (p) {
++ if (p->bitrate == bitrate) {
++ memcpy(p->bits, bits, YAM_FPGA_SIZE);
++ return p->bits;
++ }
++ p = p->next;
++ }
++
++ /* Allocate a new mcs */
++ p = kmalloc(sizeof(struct yam_mcs), GFP_ATOMIC);
++ if (p == NULL) {
++ printk(KERN_WARNING "YAM: no memory to allocate mcs\n");
++ return NULL;
++ }
++
++ memcpy(p->bits, bits, YAM_FPGA_SIZE);
++ p->bitrate = bitrate;
++ p->next = yam_data;
++ yam_data = p;
++
++ return p->bits;
++}
++
++static unsigned char *get_mcs(int bitrate)
++{
++ struct yam_mcs *p;
++
++ p = yam_data;
++ while (p) {
++ if (p->bitrate == bitrate)
++ return p->bits;
++ p = p->next;
++ }
++
++ /* Load predefined mcs data */
++ switch (bitrate) {
++ case 1200 :
++ return add_mcs(bits_1200, bitrate);
++ default :
++ return add_mcs(bits_9600, bitrate);
++ }
++}
++
++/*
++ * download bitstream to FPGA
++ * data is contained in bits[] array in fpgaconf.h
++ */
++
++static int fpga_download(int iobase, int bitrate)
++{
++ int i, rc;
++ unsigned char *pbits;
++
++ pbits = get_mcs(bitrate);
++ if (pbits == NULL)
++ return -1;
++
++ fpga_reset(iobase);
++ for(i = 0 ; i < YAM_FPGA_SIZE ; i++) {
++ if (fpga_write(iobase, pbits[i])) {
++ printk("yam: error in write cycle\n");
++ return -1; /* write... */
++ }
++ }
++
++ fpga_write(iobase, 0xFF);
++ rc = inb(MSR(iobase)); /* check DONE signal */
++
++ /* Necesary for some hardwares */
++ delay(50);
++
++ return (rc & MSR_DSR) ? 0 : -1;
++}
++
++
++/************************************************************************
++* Serial port init
++************************************************************************/
++
++static void yam_set_uart(struct device *dev)
++{
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++ int divisor = 115200/yp->baudrate;
++
++ outb(0, IER(dev->base_addr));
++ outb(LCR_DLAB|LCR_BIT8, LCR(dev->base_addr));
++ outb(divisor, DLL(dev->base_addr));
++ outb(0, DLM(dev->base_addr));
++ outb(LCR_BIT8, LCR(dev->base_addr));
++ outb(PTT_OFF, MCR(dev->base_addr));
++ outb(0x00, FCR(dev->base_addr));
++
++ /* Flush pending irq */
++
++ inb(RBR(dev->base_addr));
++ inb(MSR(dev->base_addr));
++
++ /* Enable rx irq */
++
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ /* if (yp->dupmode) {
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ }
++ else {
++ outb(ENABLE_RXINT, IER(dev->base_addr));
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ } */
++}
++
++
++/* --------------------------------------------------------------------- */
++
++enum uart { c_uart_unknown, c_uart_8250,
++ c_uart_16450, c_uart_16550, c_uart_16550A};
++static const char *uart_str[] =
++ { "unknown", "8250", "16450", "16550", "16550A" };
++
++static enum uart yam_check_uart(unsigned int iobase)
++{
++ unsigned char b1,b2,b3;
++ enum uart u;
++ enum uart uart_tab[] =
++ { c_uart_16450, c_uart_unknown, c_uart_16550, c_uart_16550A };
++
++ b1 = inb(MCR(iobase));
++ outb(b1 | 0x10, MCR(iobase)); /* loopback mode */
++ b2 = inb(MSR(iobase));
++ outb(0x1a, MCR(iobase));
++ b3 = inb(MSR(iobase)) & 0xf0;
++ outb(b1, MCR(iobase)); /* restore old values */
++ outb(b2, MSR(iobase));
++ if (b3 != 0x90)
++ return c_uart_unknown;
++ inb(RBR(iobase));
++ inb(RBR(iobase));
++ outb(0x01, FCR(iobase)); /* enable FIFOs */
++ u = uart_tab[(inb(IIR(iobase)) >> 6) & 3];
++ if (u == c_uart_16450) {
++ outb(0x5a, SCR(iobase));
++ b1 = inb(SCR(iobase));
++ outb(0xa5, SCR(iobase));
++ b2 = inb(SCR(iobase));
++ if ((b1 != 0x5a) || (b2 != 0xa5))
++ u = c_uart_8250;
++ }
++ return u;
++}
++
++/******************************************************************************
++* Rx Section
++******************************************************************************/
++static void inline yam_rx_flag(struct device *dev, struct yam_port *yp)
++{
++ if (yp->dcd && yp->rx_len >= 3 && yp->rx_len < YAM_MAX_FRAME) {
++ int pkt_len = yp->rx_len - 2 + 1; /* -CRC + kiss */
++ struct sk_buff *skb;
++
++ if ((yp->rx_crch & yp->rx_crcl) != 0xFF) {
++ /* Bad crc */
++ }
++ else {
++ if (!(skb = dev_alloc_skb(pkt_len))) {
++ printk("%s: memory squeeze, dropping packet\n", dev->name);
++ ++yp->stats.rx_dropped;
++ }
++ else {
++ unsigned char *cp;
++ skb->dev = dev;
++ cp = skb_put(skb, pkt_len);
++ *cp++ = 0; /* KISS kludge */
++ memcpy(cp, yp->rx_buf, pkt_len - 1);
++ skb->protocol = htons(ETH_P_AX25);
++ skb->mac.raw = skb->data;
++ netif_rx(skb);
++ ++yp->stats.rx_packets;
++ }
++ }
++ }
++ yp->rx_len = 0;
++ yp->rx_crcl = 0x21;
++ yp->rx_crch = 0xf3;
++}
++
++static void inline yam_rx_byte(struct device *dev, struct yam_port *yp, unsigned char rxb)
++{
++ if (yp->rx_len < YAM_MAX_FRAME) {
++ unsigned char c = yp->rx_crcl;
++ yp->rx_crcl = (chktabl[c]^yp->rx_crch);
++ yp->rx_crch = (chktabh[c]^rxb);
++ yp->rx_buf[yp->rx_len++] = rxb;
++ }
++}
++
++/********************************************************************************
++* TX Section
++********************************************************************************/
++
++static void ptt_on(struct device *dev)
++{
++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */
++
++ outb(PTT_ON, MCR(dev->base_addr));
++ /* inb(MSR(dev->base_addr));
++ if (yp->dupmode) {
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ }
++ else {
++ outb(ENABLE_TXINT, IER(dev->base_addr));
++ } */
++}
++
++static void ptt_off(struct device *dev)
++{
++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */
++
++ outb(PTT_OFF, MCR(dev->base_addr));
++ /* if (yp->dupmode) {
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ }
++ else {
++ inb(RBR(dev->base_addr));
++ outb(ENABLE_RXINT, IER(dev->base_addr));
++ } */
++}
++
++static int yam_send_packet(struct sk_buff *skb, struct device *dev)
++{
++ struct yam_port *yp = dev->priv;
++
++ if (skb == NULL) {
++ dev_tint(dev);
++ return 0;
++ }
++ skb_queue_tail(&yp->send_queue, skb);
++ dev->trans_start = jiffies;
++ return 0;
++}
++
++static void yam_start_tx(struct device *dev, struct yam_port *yp)
++{
++ if ((yp->tx_state == TX_TAIL) || (yp->txd == 0))
++ yp->tx_count = 1;
++ else
++ yp->tx_count = (yp->bitrate*yp->txd)/8000;
++ yp->tx_state = TX_HEAD;
++ ptt_on(dev);
++}
++
++static unsigned short random_seed;
++
++static inline unsigned short random_num(void)
++{
++ random_seed = 28629 * random_seed + 157;
++ return random_seed;
++}
++
++static void yam_arbitrate(struct device *dev)
++{
++ struct yam_port *yp = dev->priv;
++
++ if (!yp || yp->magic != YAM_MAGIC
++ || yp->tx_state!=TX_OFF || skb_queue_empty(&yp->send_queue)) {
++ return;
++ }
++
++ /* tx_state is TX_OFF and there is data to send */
++
++ if (yp->dupmode) {
++ /* Full duplex mode, don't wait */
++ yam_start_tx(dev, yp);
++ return;
++ }
++
++ if (yp->dcd) {
++ /* DCD on, wait slotime ... */
++ yp->slotcnt = yp->slot / 10;
++ return;
++ }
++
++ /* Is slottime passed ? */
++ if ((--yp->slotcnt) > 0)
++ return;
++
++ yp->slotcnt = yp->slot / 10;
++
++ /* is random > persist ? */
++ if ((random_num() % 256) > yp->pers)
++ return;
++
++ yam_start_tx(dev, yp);
++}
++
++static void yam_dotimer(unsigned long dummy)
++{
++ int i;
++
++ for (i = 0; i < NR_PORTS; i++) {
++ struct device *dev = &yam_ports[i].dev;
++ if (dev->start) yam_arbitrate(dev);
++ }
++ yam_timer.expires = jiffies + HZ/100;
++ add_timer(&yam_timer);
++}
++
++static void yam_tx_byte(struct device *dev, struct yam_port *yp)
++{
++ struct sk_buff *skb;
++ unsigned char b, temp;
++
++ switch (yp->tx_state) {
++ case TX_OFF:
++ break;
++ case TX_HEAD:
++ if (--yp->tx_count <= 0) {
++ if (!(skb = skb_dequeue(&yp->send_queue))) {
++ ptt_off(dev);
++ yp->tx_state = TX_OFF;
++ break;
++ }
++ yp->tx_state = TX_DATA;
++ if (skb->data[0] != 0) {
++/* do_kiss_params(s, skb->data, skb->len);*/
++ dev_kfree_skb(skb, FREE_WRITE);
++ break;
++ }
++ yp->tx_len = skb->len-1; /* strip KISS byte */
++ if (yp->tx_len >= YAM_MAX_FRAME || yp->tx_len < 2) {
++ dev_kfree_skb(skb, FREE_WRITE);
++ break;
++ }
++ memcpy(yp->tx_buf, skb->data+1, yp->tx_len);
++ dev_kfree_skb(skb, FREE_WRITE);
++ yp->tx_count = 0;
++ yp->tx_crcl = 0x21;
++ yp->tx_crch = 0xf3;
++ yp->tx_state = TX_DATA;
++ }
++ break;
++ case TX_DATA:
++ b = yp->tx_buf[yp->tx_count++];
++ outb(b, THR(dev->base_addr));
++ temp = yp->tx_crcl;
++ yp->tx_crcl = chktabl[temp]^yp->tx_crch;
++ yp->tx_crch = chktabh[temp]^b;
++ if (yp->tx_count >= yp->tx_len) {
++ yp->tx_state = TX_CRC1;
++ }
++ break;
++ case TX_CRC1:
++ yp->tx_crch = chktabl[yp->tx_crcl]^yp->tx_crch;
++ yp->tx_crcl = chktabh[yp->tx_crcl]^chktabl[yp->tx_crch]^0xff;
++ outb(yp->tx_crcl, THR(dev->base_addr));
++ yp->tx_state = TX_CRC2;
++ break;
++ case TX_CRC2:
++ outb(chktabh[yp->tx_crch]^0xFF, THR(dev->base_addr));
++ if (skb_queue_empty(&yp->send_queue)) {
++ yp->tx_count = (yp->bitrate*yp->txtail)/8000;
++ if (yp->dupmode == 2) yp->tx_count += (yp->bitrate*yp->holdd)/8;
++ if (yp->tx_count == 0) yp->tx_count = 1;
++ yp->tx_state = TX_TAIL;
++ }
++ else {
++ yp->tx_count = 1;
++ yp->tx_state = TX_HEAD;
++ }
++ ++yp->stats.tx_packets;
++ break;
++ case TX_TAIL:
++ if (--yp->tx_count <= 0) {
++ yp->tx_state = TX_OFF;
++ ptt_off(dev);
++ }
++ break;
++ }
++}
++
++/***********************************************************************************
++* ISR routine
++************************************************************************************/
++
++static void yam_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct device *dev;
++ struct yam_port *yp;
++ unsigned char iir;
++ int counter = 100;
++ int i;
++
++ sti();
++
++ for (i = 0 ; i < NR_PORTS ; i++) {
++ yp = &yam_ports[i];
++ dev = &yp->dev;
++
++ if (!dev->start)
++ continue;
++
++ while ( (iir = IIR_MASK & inb(IIR(dev->base_addr)) ) != IIR_NOPEND) {
++ unsigned char msr = inb(MSR(dev->base_addr));
++ unsigned char lsr = inb(LSR(dev->base_addr));
++ unsigned char rxb;
++
++ if (lsr & LSR_OE)
++ ++yp->stats.rx_fifo_errors;
++
++ yp->dcd = (msr & RX_DCD) ? 1 : 0;
++
++ if (--counter <= 0) {
++ printk("%s: too many irq iir=%d\n", dev->name, iir);
++ return;
++ }
++
++ if (msr & TX_RDY) {
++ ++yp->nb_mdint;
++ yam_tx_byte(dev, yp);
++ }
++
++ if (lsr & LSR_RXC) {
++ ++yp->nb_rxint;
++ rxb = inb(RBR(dev->base_addr));
++ if (msr & RX_FLAG) yam_rx_flag(dev, yp);
++ else yam_rx_byte(dev, yp, rxb);
++ }
++ /*
++ switch (iir) {
++ case IIR_MSR:
++ ++yp->nb_mdint;
++ if (msr & TX_RDY) yam_tx_byte(dev, yp);
++ break;
++ case IIR_RX:
++ ++yp->nb_rxint;
++ rxb = inb(RBR(dev->base_addr));
++ if (msr & RX_FLAG) yam_rx_flag(dev, yp);
++ else yam_rx_byte(dev, yp, rxb);
++ break;
++ }
++ */
++ }
++ }
++}
++
++static int yam_net_get_info(char *buffer, char **start, off_t offset, int length, int dummy)
++{
++ int len = 0;
++ int i;
++ off_t pos = 0;
++ off_t begin = 0;
++
++ cli();
++
++ for (i = 0; i < NR_PORTS; i++)
++ {
++ if (yam_ports[i].iobase == 0 || yam_ports[i].irq == 0)
++ continue;
++ len += sprintf(buffer+len, "Device %s\n", yam_ports[i].name);
++ len += sprintf(buffer+len, " Up %d\n", yam_ports[i].dev.start);
++ len += sprintf(buffer+len, " Speed %u\n", yam_ports[i].bitrate);
++ len += sprintf(buffer+len, " IoBase 0x%x\n", yam_ports[i].iobase);
++ len += sprintf(buffer+len, " BaudRate %u\n", yam_ports[i].baudrate);
++ len += sprintf(buffer+len, " IRQ %u\n", yam_ports[i].irq);
++ len += sprintf(buffer+len, " TxState %u\n", yam_ports[i].tx_state);
++ len += sprintf(buffer+len, " Duplex %u\n", yam_ports[i].dupmode);
++ len += sprintf(buffer+len, " HoldDly %u\n", yam_ports[i].holdd);
++ len += sprintf(buffer+len, " TxDelay %u\n", yam_ports[i].txd);
++ len += sprintf(buffer+len, " TxTail %u\n", yam_ports[i].txtail);
++ len += sprintf(buffer+len, " SlotTime %u\n", yam_ports[i].slot);
++ len += sprintf(buffer+len, " Persist %u\n", yam_ports[i].pers);
++ len += sprintf(buffer+len, " TxFrames %u\n", yam_ports[i].stats.tx_packets);
++ len += sprintf(buffer+len, " RxFrames %u\n", yam_ports[i].stats.rx_packets);
++ len += sprintf(buffer+len, " TxInt %u\n", yam_ports[i].nb_mdint);
++ len += sprintf(buffer+len, " RxInt %u\n", yam_ports[i].nb_rxint);
++ len += sprintf(buffer+len, " RxOver %u\n", yam_ports[i].stats.rx_fifo_errors);
++ len += sprintf(buffer+len, "\n");
++
++ pos = begin + len;
++
++ if (pos < offset) {
++ len = 0;
++ begin = pos;
++ }
++
++ if (pos > offset + length)
++ break;
++ }
++
++ sti();
++
++ *start = buffer + (offset - begin);
++ len -= (offset - begin);
++
++ if (len > length) len = length;
++
++ return len;
++}
++
++#ifdef CONFIG_INET
++#ifndef PROC_NET_YAM
++#define PROC_NET_YAM (PROC_NET_LAST+10) /* Sorry again... */
++#endif
++
++struct proc_dir_entry yam_proc_dir_entry =
++{
++ PROC_NET_YAM, 3, "yam", S_IFREG | S_IRUGO, 1, 0, 0, 0,
++ &proc_net_inode_operations, yam_net_get_info
++};
++
++#define yam_net_procfs_init() proc_net_register(&yam_proc_dir_entry);
++#define yam_net_procfs_remove() proc_net_unregister(PROC_NET_YAM);
++#else
++#define yam_net_procfs_init()
++#define yam_net_procfs_remove()
++#endif
++
++/* --------------------------------------------------------------------- */
++
++#if LINUX_VERSION_CODE >= 0x20119
++static struct net_device_stats *yam_get_stats(struct device *dev)
++#else
++static struct enet_statistics *yam_get_stats(struct device *dev)
++#endif
++{
++ struct yam_port *yp;
++
++ if (!dev || !dev->priv)
++ return NULL;
++
++ yp = (struct yam_port *)dev->priv;
++ if (yp->magic != YAM_MAGIC)
++ return NULL;
++
++ /*
++ * Get the current statistics. This may be called with the
++ * card open or closed.
++ */
++ return &yp->stats;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_open(struct device *dev)
++{
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++ enum uart u;
++ int i;
++
++ printk(KERN_INFO "Trying %s at iobase 0x%lx irq %u\n", dev->name, dev->base_addr, dev->irq);
++
++ if (!dev || !yp || !yp->bitrate)
++ return -ENXIO;
++ if (!dev->base_addr || dev->base_addr > 0x1000-YAM_EXTENT ||
++ dev->irq < 2 || dev->irq > 15) {
++ return -ENXIO;
++ }
++ if (check_region(dev->base_addr, YAM_EXTENT)) {
++ printk("%s: cannot 0x%lx busy\n", dev->name, dev->base_addr);
++ return -EACCES;
++ }
++ if ((u = yam_check_uart(dev->base_addr)) == c_uart_unknown) {
++ printk("%s: cannot find uart type\n", dev->name);
++ return -EIO;
++ }
++
++ if (fpga_download(dev->base_addr, yp->bitrate)) {
++ printk("%s: cannot init FPGA\n", dev->name);
++ return -EIO;
++ }
++
++ outb(0, IER(dev->base_addr));
++ if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT|SA_SHIRQ, dev->name, NULL)) {
++ printk("%s: irq %d busy\n", dev->name, dev->irq);
++ return -EBUSY;
++ }
++
++ request_region(dev->base_addr, YAM_EXTENT, dev->name);
++
++ yam_set_uart(dev);
++ dev->start = 1;
++ yp->slotcnt = yp->slot / 10;
++
++ /* Reset overruns for all ports - FPGA programming makes overruns */
++ for (i = 0 ; i < NR_PORTS ; i++) {
++ inb(LSR(yam_ports[i].dev.base_addr));
++ yam_ports[i].stats.rx_fifo_errors = 0;
++ }
++
++ printk(KERN_INFO "%s at iobase 0x%lx irq %u uart %s\n", dev->name, dev->base_addr, dev->irq,
++ uart_str[u]);
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_close(struct device *dev)
++{
++ struct sk_buff *skb;
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++
++ if (!dev || !yp)
++ return -EINVAL;
++ /*
++ * disable interrupts
++ */
++ outb(0, IER(dev->base_addr));
++ outb(1, MCR(dev->base_addr));
++ /* Remove IRQ handler if last */
++ free_irq(dev->irq, NULL);
++ release_region(dev->base_addr, YAM_EXTENT);
++ dev->start = 0;
++ dev->tbusy = 1;
++ while ((skb = skb_dequeue(&yp->send_queue)))
++ dev_kfree_skb(skb, FREE_WRITE);
++
++ printk(KERN_INFO "%s: close yam at iobase 0x%lx irq %u\n",
++ yam_drvname, dev->base_addr, dev->irq);
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_ioctl(struct device *dev, struct ifreq *ifr, int cmd)
++{
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++ struct yamdrv_ioctl_cfg yi;
++ struct yamdrv_ioctl_mcs *ym;
++ int ioctl_cmd;
++
++ if (copy_from_user(&ioctl_cmd, ifr->ifr_data, sizeof(int)))
++ return -EFAULT;
++
++ if (yp == NULL || yp->magic != YAM_MAGIC)
++ return -EINVAL;
++
++ if (!suser()) return -EPERM;
++
++ if (cmd != SIOCDEVPRIVATE)
++ return -EINVAL;
++
++ switch(ioctl_cmd) {
++
++ case SIOCYAMRESERVED:
++ return -EINVAL; /* unused */
++
++ case SIOCYAMSMCS:
++ if (dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_ATOMIC);
++ ym->bitrate = 9600;
++ if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs)))
++ return -EFAULT;
++ if (ym->bitrate > YAM_MAXBITRATE) return -EINVAL;
++ add_mcs(ym->bits, ym->bitrate);
++ kfree(ym);
++ break;
++
++ case SIOCYAMSCFG:
++ if (copy_from_user(&yi, ifr->ifr_data, sizeof(struct yamdrv_ioctl_cfg)))
++ return -EFAULT;
++
++ if ((yi.cfg.mask & YAM_IOBASE) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ if ((yi.cfg.mask & YAM_IRQ) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ if ((yi.cfg.mask & YAM_BITRATE) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ if ((yi.cfg.mask & YAM_BAUDRATE) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++
++ if (yi.cfg.mask & YAM_IOBASE) {
++ yp->iobase = yi.cfg.iobase;
++ dev->base_addr = yi.cfg.iobase;
++ }
++ if (yi.cfg.mask & YAM_IRQ) {
++ if (yi.cfg.irq > 15) return -EINVAL;
++ yp->irq = yi.cfg.irq;
++ dev->irq = yi.cfg.irq;
++ }
++ if (yi.cfg.mask & YAM_BITRATE) {
++ if (yi.cfg.bitrate > YAM_MAXBITRATE) return -EINVAL;
++ yp->bitrate = yi.cfg.bitrate;
++ }
++ if (yi.cfg.mask & YAM_BAUDRATE) {
++ if (yi.cfg.baudrate > YAM_MAXBAUDRATE) return -EINVAL;
++ yp->baudrate = yi.cfg.baudrate;
++ }
++ if (yi.cfg.mask & YAM_MODE) {
++ if (yi.cfg.mode > YAM_MAXMODE) return -EINVAL;
++ yp->dupmode = yi.cfg.mode;
++ }
++ if (yi.cfg.mask & YAM_HOLDDLY) {
++ if (yi.cfg.holddly > YAM_MAXHOLDDLY) return -EINVAL;
++ yp->holdd = yi.cfg.holddly;
++ }
++ if (yi.cfg.mask & YAM_TXDELAY) {
++ if (yi.cfg.txdelay > YAM_MAXTXDELAY) return -EINVAL;
++ yp->txd = yi.cfg.txdelay;
++ }
++ if (yi.cfg.mask & YAM_TXTAIL) {
++ if (yi.cfg.txtail > YAM_MAXTXTAIL) return -EINVAL;
++ yp->txtail = yi.cfg.txtail;
++ }
++ if (yi.cfg.mask & YAM_PERSIST) {
++ if (yi.cfg.persist > YAM_MAXPERSIST) return -EINVAL;
++ yp->pers = yi.cfg.persist;
++ }
++ if (yi.cfg.mask & YAM_SLOTTIME) {
++ if (yi.cfg.slottime > YAM_MAXSLOTTIME) return -EINVAL;
++ yp->slot = yi.cfg.slottime;
++ yp->slotcnt = yp->slot / 10;
++ }
++ break;
++
++ case SIOCYAMGCFG:
++ yi.cfg.mask = 0xffffffff;
++ yi.cfg.iobase = yp->iobase;
++ yi.cfg.irq = yp->irq;
++ yi.cfg.bitrate = yp->bitrate;
++ yi.cfg.baudrate = yp->baudrate;
++ yi.cfg.mode = yp->dupmode;
++ yi.cfg.txdelay = yp->txd;
++ yi.cfg.holddly = yp->holdd;
++ yi.cfg.txtail = yp->txtail;
++ yi.cfg.persist = yp->pers;
++ yi.cfg.slottime = yp->slot;
++ if (copy_to_user(ifr->ifr_data, &yi, sizeof(struct yamdrv_ioctl_cfg)))
++ return -EFAULT;
++ break;
++
++ default:
++ return -EINVAL;
++
++ }
++
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_set_mac_address(struct device *dev, void *addr)
++{
++ struct sockaddr *sa = (struct sockaddr *)addr;
++
++ /* addr is an AX.25 shifted ASCII mac address */
++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len);
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_probe(struct device *dev)
++{
++ struct yam_port *yp;
++
++ if (!dev)
++ return -ENXIO;
++
++ yp = (struct yam_port *)dev->priv;
++
++ dev->open = yam_open;
++ dev->stop = yam_close;
++ dev->do_ioctl = yam_ioctl;
++ dev->hard_start_xmit = yam_send_packet;
++ dev->get_stats = yam_get_stats;
++
++ dev_init_buffers(dev);
++ skb_queue_head_init(&yp->send_queue);
++
++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
++ dev->hard_header = ax25_encapsulate;
++ dev->rebuild_header = ax25_rebuild_header;
++#else /* CONFIG_AX25 || CONFIG_AX25_MODULE */
++ dev->hard_header = NULL;
++ dev->rebuild_header = NULL;
++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */
++
++ dev->set_mac_address = yam_set_mac_address;
++
++ dev->type = ARPHRD_AX25; /* AF_AX25 device */
++ dev->hard_header_len = 73; /* We do digipeaters now */
++ dev->mtu = 256; /* AX25 is the default */
++ dev->addr_len = 7; /* sizeof an ax.25 address */
++ memcpy(dev->broadcast, ax25_bcast, 7);
++ memcpy(dev->dev_addr, ax25_test, 7);
++
++ /* New style flags */
++ dev->flags = 0;
++ dev->family = AF_INET;
++ dev->pa_addr = 0;
++ dev->pa_brdaddr = 0;
++ dev->pa_mask = 0;
++ dev->pa_alen = sizeof(unsigned long);
++
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++__initfunc(int yam_init(struct device *dev))
++{
++ int i;
++
++ printk(yam_drvinfo);
++
++ /* Clears the IRQ table */
++ memset(irqs, 0, sizeof(irqs));
++ memset(yam_ports, 0, sizeof(yam_ports));
++
++ for(i = 0; i < NR_PORTS; i++) {
++ sprintf(yam_ports[i].name, "yam%d", i);
++ yam_ports[i].magic = YAM_MAGIC;
++ yam_ports[i].bitrate = DEFAULT_BITRATE;
++ yam_ports[i].baudrate = DEFAULT_BITRATE * 2;
++ yam_ports[i].iobase = 0;
++ yam_ports[i].irq = 0;
++ yam_ports[i].dupmode = 0;
++ yam_ports[i].holdd = DEFAULT_HOLDD;
++ yam_ports[i].txd = DEFAULT_TXD;
++ yam_ports[i].txtail = DEFAULT_TXTAIL;
++ yam_ports[i].slot = DEFAULT_SLOT;
++ yam_ports[i].pers = DEFAULT_PERS;
++
++ dev = &yam_ports[i].dev;
++
++ dev->priv = &yam_ports[i];
++ dev->name = yam_ports[i].name;
++ dev->base_addr = yam_ports[i].iobase;
++ dev->irq = yam_ports[i].irq;
++ dev->init = yam_probe;
++ dev->if_port = 0;
++ dev->start = 0;
++ dev->tbusy = 1;
++
++ if (register_netdev(dev)) {
++ printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name);
++ return -ENXIO;
++ }
++ }
++
++ yam_timer.function = yam_dotimer;
++ yam_timer.expires = jiffies + HZ/100;
++ add_timer(&yam_timer);
++
++ yam_net_procfs_init();
++
++ /* do not keep this device */
++ return 1;
++}
++
++/* --------------------------------------------------------------------- */
++
++#ifdef MODULE
++
++/*
++ * command line settable parameters
++ */
++
++#if LINUX_VERSION_CODE >= 0x20115
++
++MODULE_AUTHOR("Frederic Rible F1OAT frible@teaser.fr");
++MODULE_DESCRIPTION("Yam amateur radio modem driver");
++
++#endif
++
++__initfunc(int init_module(void))
++{
++ int ret = yam_init(NULL);
++
++ return (ret == 1) ? 0 : ret;
++}
++
++/* --------------------------------------------------------------------- */
++
++void cleanup_module(void)
++{
++ int i;
++
++ del_timer(&yam_timer);
++ for(i = 0; i < NR_PORTS; i++) {
++ struct device *dev = &yam_ports[i].dev;
++ if (!dev->priv) continue;
++ if (dev->start) yam_close(dev);
++ unregister_netdev(dev);
++ }
++ free_mcs();
++ yam_net_procfs_remove();
++}
++
++#endif /* MODULE */
++/* --------------------------------------------------------------------- */
diff --git a/yamdrv/yam08-2.2.1-patch.diff b/yamdrv/yam08-2.2.1-patch.diff
new file mode 100644
index 0000000..0906155
--- /dev/null
+++ b/yamdrv/yam08-2.2.1-patch.diff
@@ -0,0 +1,2172 @@
+diff -u --recursive --new-file linux.prev/Documentation/Configure.help linux/Documentation/Configure.help
+--- linux.prev/Documentation/Configure.help Sat Sep 12 23:12:05 1998
++++ linux/Documentation/Configure.help Sat Sep 12 23:07:13 1998
+@@ -3178,6 +2875,13 @@
+ ### Don't know what's going on here.
+ ###
+ #
++YAM driver for AX.25
++CONFIG_YAM
++ Support for the YAM modem on serial port. If you want to compile this
++ as a module ( = code which can be inserted in and removed from the
++ running kernel whenever you want), say M here and read
++ Documentation/modules.txt.
++
+ BAYCOM picpar and par96 driver for AX.25
+ CONFIG_BAYCOM_PAR
+ This is a driver for Baycom style simple amateur radio modems that
+diff -u --recursive --new-file linux.prev/drivers/net/hamradio/Config.in linux/drivers/net/hamradio/Config.in
+--- linux.prev/drivers/net/hamradio/Config.in Sat Sep 12 23:11:49 1998
++++ linux/drivers/net/hamradio/Config.in Sat Sep 12 22:02:40 1998
+@@ -28,3 +28,5 @@
+ bool ' soundmodem support for 4800 baud PSK modulation' CONFIG_SOUNDMODEM_PSK4800
+ bool ' soundmodem support for 9600 baud FSK G3RUH modulation' CONFIG_SOUNDMODEM_FSK9600
+ fi
++
++tristate 'YAM driver for AX.25' CONFIG_YAM
+diff -u --recursive --new-file linux.prev/drivers/net/hamradio/Makefile linux/drivers/net/hamradio/Makefile
+--- linux.prev/drivers/net/hamradio/Makefile Sat Sep 12 23:11:49 1998
++++ linux/drivers/net/hamradio/Makefile Sat Sep 12 22:01:01 1998
+@@ -53,6 +53,14 @@
+ endif
+ endif
+
++ifeq ($(CONFIG_YAM),y)
++L_OBJS += yam.o
++else
++ ifeq ($(CONFIG_YAM),m)
++ M_OBJS += yam.o
++ endif
++endif
++
+ ifeq ($(CONFIG_PI),y)
+ L_OBJS += pi2.o
+ else
+diff -u --recursive --new-file linux.prev/drivers/net/Space.c linux/drivers/net/Space.c
+--- linux.prev/drivers/net/Space.c Sat Sep 12 23:11:49 1998
++++ linux/drivers/net/Space.c Sat Sep 12 22:01:42 1998
+@@ -660,6 +660,16 @@
+ #define NEXT_DEV (&mkiss_bootstrap)
+ #endif /* MKISS */
+
++#if defined(CONFIG_YAM)
++ /* To be exact, this node just hooks the initialization
++ routines to the device structures. */
++extern int yam_init(struct device *);
++static struct device yam_bootstrap = {
++ "yam", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, yam_init, };
++#undef NEXT_DEV
++#define NEXT_DEV (&yam_bootstrap)
++#endif /* CONFIG_YAM */
++
+ #if defined(CONFIG_STRIP)
+ extern int strip_init_ctrl_dev(struct device *);
+ static struct device strip_bootstrap = {
+diff -u --recursive --new-file linux.prev/include/linux/yam.h linux/include/linux/yam.h
+--- linux.prev/include/linux/yam.h Thu Jan 1 00:00:00 1970
++++ linux/include/linux/yam.h Sat Sep 12 22:03:24 1998
+@@ -0,0 +1,82 @@
++/*****************************************************************************/
++
++/*
++ * yam.h -- YAM radio modem driver.
++ *
++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr)
++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You 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.
++ *
++ * Please note that the GPL allows you to use the driver, NOT the radio.
++ * In order to use the radio, you need a license from the communications
++ * authority of your country.
++ *
++ *
++ */
++
++/*****************************************************************************/
++
++#define SIOCYAMRESERVED (0)
++#define SIOCYAMSCFG (1) /* Set configuration */
++#define SIOCYAMGCFG (2) /* Get configuration */
++#define SIOCYAMSMCS (3) /* Set mcs data */
++
++#define YAM_IOBASE (1 << 0)
++#define YAM_IRQ (1 << 1)
++#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */
++#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */
++#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */
++#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */
++#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */
++#define YAM_PERSIST (1 << 7) /* Persist (ms) */
++#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */
++#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */
++
++#define YAM_MAXBITRATE 57600
++#define YAM_MAXBAUDRATE 115200
++#define YAM_MAXMODE 2
++#define YAM_MAXHOLDDLY 99
++#define YAM_MAXTXDELAY 999
++#define YAM_MAXTXTAIL 999
++#define YAM_MAXPERSIST 255
++#define YAM_MAXSLOTTIME 999
++
++#define YAM_FPGA_SIZE 5302
++
++struct yamcfg {
++ unsigned int mask; /* Mask of commands */
++ unsigned int iobase; /* IO Base of COM port */
++ unsigned int irq; /* IRQ of COM port */
++ unsigned int bitrate; /* Bit rate of radio port */
++ unsigned int baudrate; /* Baud rate of the RS232 port */
++ unsigned int txdelay; /* TxDelay */
++ unsigned int txtail; /* TxTail */
++ unsigned int persist; /* Persistence */
++ unsigned int slottime; /* Slottime */
++ unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */
++ unsigned int holddly; /* PTT delay in FullDuplex 2 mode */
++};
++
++struct yamdrv_ioctl_cfg {
++ int cmd;
++ struct yamcfg cfg;
++};
++
++struct yamdrv_ioctl_mcs {
++ int cmd;
++ int bitrate;
++ unsigned char bits[YAM_FPGA_SIZE];
++};
+diff -u --recursive --new-file linux.prev/drivers/net/hamradio/yam1200.h linux/drivers/net/hamradio/yam1200.h
+--- linux.prev/drivers/net/hamradio/yam1200.h Thu Jan 1 00:00:00 1970
++++ linux/drivers/net/hamradio/yam1200.h Sat Sep 12 22:03:34 1998
+@@ -0,0 +1,343 @@
++/*
++ *
++ * File yam1k2b5.mcs converted to h format by mcs2h
++ *
++ * (C) F6FBB 1998
++ *
++ * Tue Aug 25 20:24:08 1998
++ *
++ */
++
++static unsigned char bits_1200[]= {
++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xf3,0xcb,0xff,0xdb,0xfc,0xf2,
++0xff,0xf6,0xff,0x3c,0xbf,0xfd,0xbf,0xdf,0x6e,0x3f,0x6f,0xf1,0x7d,0xb4,0xfd,0xbf,
++0xdf,0x6f,0x3f,0x6f,0xf7,0x0b,0xff,0xdb,0xfd,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff,
++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
++0xfd,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xbf,
++0xff,0xff,0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfc,0xff,0xfe,0xff,0xff,0xff,0xf0,
++0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf1,0xff,0xff,0xfe,0x7f,0xbf,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xff,0xff,0xf0,0x9f,
++0xff,0xff,0xff,0xfe,0xff,0xfd,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xff,
++0xff,0xff,0xfb,0xff,0xfb,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xf0,0x5f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xbf,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,
++0xff,0xff,0xff,0xfd,0xff,0xbf,0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xfb,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff,
++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xf7,0xff,0xff,0xf1,0xff,0xff,0xf7,0xbf,0xe7,0xff,0xff,0xff,0xff,0xfb,
++0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdb,
++0xff,0xff,0xf5,0xa5,0xfd,0x4b,0x6e,0xef,0x33,0x32,0xdd,0xd3,0x4a,0xd6,0x92,0xfe,
++0xb3,0x3f,0xbd,0xf1,0xfa,0xdb,0xfe,0xf7,0xf6,0x96,0xbd,0xbd,0xff,0xbd,0xff,0xed,
++0x7f,0x6b,0x7f,0xfb,0xdf,0xfe,0xfb,0xfe,0x90,0xcf,0xff,0xff,0xff,0xfe,0xbe,0xef,
++0xff,0xff,0xdb,0x5f,0xf6,0xff,0xf6,0x8f,0xfd,0xa5,0xdd,0xff,0xff,0xff,0xff,0x6f,
++0x7f,0xdb,0xf1,0xfc,0xbf,0xff,0x6f,0xff,0xef,0xfc,0x5b,0x5d,0xda,0xdf,0xf4,0xff,
++0xf2,0xff,0xfd,0xbf,0xff,0xff,0xff,0xd0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xfb,0xef,0xb7,0xfc,0x33,0xff,0xfb,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0,
++0x0f,0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x72,0x0f,0xf1,0x6f,0xff,0xfe,0x94,0x3f,
++0xff,0xff,0xff,0x7b,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf0,
++0xf7,0xef,0xb7,0xfc,0x33,0xff,0xff,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0,0x0f,
++0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x73,0x8f,0xf2,0x6f,0xff,0xfe,0x94,0x3f,0xff,
++0xff,0xff,0x7d,0x9f,0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x9e,
++0xff,0xfc,0xef,0xd3,0xfb,0xff,0x7f,0xf5,0x5f,0xfe,0x59,0xff,0xff,0xff,0xfc,0xf1,
++0xfe,0x7f,0xff,0xff,0xfa,0x17,0xff,0xe7,0xef,0xef,0xff,0xff,0x3f,0xf1,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xfc,0xea,
++0xff,0xf0,0xff,0xff,0xbf,0xf9,0x3f,0xb1,0xef,0xff,0xd7,0xff,0xfb,0xff,0xf0,0xff,
++0xff,0xf3,0xff,0xdf,0xff,0x7b,0xff,0xfd,0xff,0xf6,0xff,0xbf,0xff,0xff,0xbf,0xff,
++0xff,0xff,0xda,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x01,0x00,0x00,0x02,0x02,
++0x02,0x02,0x00,0x40,0x40,0x40,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00,
++0x00,0x00,0x00,0x00,0x19,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
++0x00,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfb,0xff,0xfd,0xff,
++0xff,0x7f,0xff,0xff,0xbf,0xff,0xef,0xff,0xff,0xfd,0xff,0xff,0xf1,0xff,0xdf,0xff,
++0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,
++0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xdf,0xff,0x7f,0xff,0xff,0xff,0xff,
++0xdf,0xdf,0xff,0xef,0xff,0x9e,0xef,0xff,0xff,0x7f,0xff,0xf1,0xef,0xff,0xff,0xff,
++0xf7,0xfa,0xbf,0xff,0xff,0xfe,0x47,0xef,0xff,0xbd,0xf6,0xff,0xff,0xdf,0xf5,0xf0,
++0xf0,0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x01,0x02,0x08,
++0x16,0x00,0x00,0x00,0x80,0x00,0x01,0x02,0x00,0x80,0x01,0x0c,0x02,0x00,0x00,0x01,
++0x00,0x00,0x20,0x00,0x00,0x06,0x00,0x20,0x00,0x10,0x00,0x14,0x00,0x04,0xc1,0xf0,
++0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f,
++0xec,0xff,0xff,0xfa,0xff,0xbf,0xff,0x6f,0xff,0xe1,0xff,0xff,0xff,0xff,0xbd,0xfe,
++0x46,0xff,0xef,0x7f,0xcd,0xdf,0xff,0xff,0xfd,0xff,0xbd,0xff,0x7f,0x7f,0xf0,0x4f,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa4,0xbc,0xcd,0x6d,0x6b,0x6f,0x5b,0xdc,0x33,
++0x5a,0xf6,0xf7,0xf6,0xb3,0x3f,0xbd,0xc1,0xfa,0x5a,0xf6,0xf6,0xb6,0xf7,0xff,0xbd,
++0xbb,0x3c,0xce,0xcf,0x34,0xef,0x33,0xbb,0xcc,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,
++0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xd6,0xff,0xfd,0xfd,0xbf,0xff,0xad,
++0xbf,0xf9,0x7f,0x6f,0xfc,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0xff,0xda,0xdb,0xfc,
++0xdb,0xff,0x76,0x8f,0xf6,0xff,0xcd,0xab,0xfe,0xfb,0xff,0xd0,0xff,0xff,0xff,0xff,
++0xfe,0xff,0x9f,0xff,0xf4,0x20,0xaf,0x6d,0x0b,0xc1,0x7b,0xff,0xff,0xff,0xcb,0xff,
++0x3f,0xf0,0xef,0x7f,0x0f,0xf1,0xc3,0x3c,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0b,
++0x1d,0x6a,0x64,0x05,0x6b,0x99,0x01,0xff,0xfd,0xef,0xf0,0x2f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xf4,0x00,0x2f,0xcc,0x0b,0xc3,0x7f,0xff,0xff,0xff,0x0a,0xdf,0xbf,
++0xfd,0x7f,0xff,0xff,0xf1,0xc3,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x4a,0x0e,
++0x96,0x64,0x02,0x97,0x99,0x10,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xfe,0x84,0xf9,0xd5,0x27,0xf1,0x7f,0xff,0xf8,0xeb,0xdf,0xf3,0xcf,0x3f,
++0x1f,0xff,0xf7,0x11,0xff,0xcf,0xff,0xfe,0x67,0xff,0xff,0xff,0xff,0xc4,0xff,0xff,
++0xb3,0xa1,0xff,0xf9,0xe0,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff,
++0xff,0xfb,0x7f,0xe0,0xff,0xc7,0xfe,0x7f,0x3f,0xff,0xfd,0x77,0x8d,0x7f,0x0f,0xff,
++0xc3,0xff,0xf1,0xbf,0x8f,0xcf,0xff,0xff,0xdd,0x7b,0xff,0xf6,0xfa,0xf7,0xff,0x40,
++0x9f,0xf9,0x7f,0xd8,0xff,0xff,0xfa,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,
++0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x10,
++0x00,0x01,0x00,0x10,0x20,0x20,0x00,0x00,0x10,0x00,0x04,0x01,0x05,0x00,0x00,0x00,
++0x00,0x40,0x40,0x00,0x00,0x3c,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,
++0xff,0xff,0xfe,0x7f,0x7f,0xff,0xef,0xff,0xff,0xdf,0xff,0xff,0xdf,0xff,0xef,0xf7,
++0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xfc,0xfd,0xff,0x7f,
++0x7e,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0xff,0xff,
++0xff,0xff,0xfe,0xeb,0xfd,0x6f,0xff,0xf7,0xfe,0xf5,0x7f,0xff,0xff,0x7f,0xbf,0xb1,
++0xff,0xff,0x9f,0xbf,0xfb,0xff,0xfe,0xff,0xfe,0xff,0xf7,0xeb,0xdf,0xbf,0x5f,0xdd,
++0xff,0xdb,0xfd,0xd0,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x00,0x42,0x00,
++0x00,0x00,0x30,0x18,0x04,0x08,0x09,0x21,0x82,0x80,0x02,0x00,0x08,0x00,0x01,0x00,
++0x00,0x00,0x0c,0x20,0x10,0x00,0x11,0x00,0x44,0x84,0x00,0x20,0x20,0x84,0x80,0x00,
++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xdd,0xf9,0xff,
++0xda,0xff,0xdc,0xdd,0xfc,0xfb,0xff,0xbf,0xfb,0x3e,0xd7,0x96,0xfe,0x61,0xf7,0xff,
++0x7f,0xff,0x3f,0xfd,0xff,0xdf,0xcf,0xf7,0xdf,0xf7,0xbf,0xfd,0xff,0xfe,0xef,0xef,
++0xfe,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf3,0xbd,0xfd,0x4b,0x74,0xcf,
++0x73,0x5b,0xcb,0x3b,0xdf,0xfe,0xf7,0xfe,0xd3,0x75,0xac,0xa1,0xfb,0xdf,0xfe,0xf7,
++0x76,0x96,0xb5,0x24,0xbd,0xa5,0xad,0x49,0x2f,0x69,0x2b,0x52,0x5b,0xbd,0xff,0xff,
++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0xff,0xcc,
++0xa7,0xfb,0xad,0xff,0x7f,0x6f,0xff,0x6d,0x7f,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,
++0x6f,0xff,0xdb,0xff,0xdb,0xff,0xf6,0x97,0xf6,0xff,0xb5,0xb5,0xff,0xff,0xff,0xd0,
++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa5,0xbc,0x43,0xfc,0x7c,0x03,0xe7,
++0xff,0xff,0x20,0xff,0xff,0xff,0xcc,0xfd,0x7d,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59,
++0xba,0x56,0x66,0x6a,0xad,0x9a,0xa9,0x9a,0x97,0xa5,0xaa,0xbb,0xff,0xff,0xf0,0x0f,
++0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xfd,0xf7,0xfd,0x43,0xff,0xfd,0x6b,0xe7,0xff,
++0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0x3f,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59,0xb5,
++0xa6,0x66,0x6a,0xad,0x9a,0xa9,0x99,0x6b,0x5a,0xaa,0xff,0xff,0xb7,0xf0,0x3f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x9c,0xf7,0xfd,0xd2,0x41,0xff,0xff,0xf2,0x7f,
++0x8f,0xff,0xff,0x3d,0xf3,0xff,0x17,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,0xdf,0xfc,
++0x8f,0x38,0xff,0xef,0x23,0xff,0xfb,0xf7,0xc8,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,
++0xff,0xfe,0xf5,0x7f,0xff,0xfd,0xff,0xe4,0xff,0xeb,0xff,0xcf,0xbf,0xfa,0xff,0xab,
++0xef,0xff,0xfb,0xff,0xf3,0xfd,0x61,0xff,0xff,0xff,0xff,0xfa,0xff,0xfb,0xfd,0x0d,
++0xff,0xfe,0xff,0x43,0x7f,0xfe,0xbf,0xd0,0xfd,0xff,0xfa,0xf0,0x3f,0xff,0xff,0xff,
++0xfe,0xf3,0xc0,0x00,0x00,0x00,0x02,0x00,0x02,0x01,0x00,0x60,0xc0,0x40,0x00,0x00,
++0x00,0x00,0x34,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x88,0x00,
++0x00,0x03,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x3c,0xf0,0x3f,0xff,0xff,0xff,0xfe,
++0xfd,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfd,0xff,
++0xff,0xff,0xff,0xfe,0xfe,0x5f,0xff,0xff,0xcb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0,
++0xff,0xff,0xfd,0xff,0xef,0xe3,0xde,0xee,0xd9,0xc5,0x93,0xff,0xff,0xfe,0xfe,0xff,
++0xfb,0xee,0xfe,0xf1,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xbf,0xf7,0xff,0xff,0x7f,
++0xaf,0xbd,0xdf,0xdf,0xfb,0xf3,0xf3,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x34,
++0x00,0x06,0x61,0x00,0x18,0x01,0xa0,0x05,0x17,0x00,0x20,0x05,0x28,0x20,0x00,0x00,
++0x05,0x00,0x41,0x00,0x00,0x40,0x00,0x09,0x00,0x01,0x20,0x86,0x82,0x08,0x40,0x03,
++0x80,0x30,0x70,0x08,0x14,0x02,0xc1,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0xbd,0xef,0xfb,0xff,0xff,0xfb,0x9c,0x7f,0xef,0xdf,0xff,0xbf,0xeb,0xde,
++0xff,0xc1,0x7f,0xff,0xfb,0x7f,0xff,0xff,0xff,0x5f,0xff,0xff,0xff,0xdf,0xbf,0xef,
++0x3f,0xf7,0x8f,0xef,0x7f,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbd,
++0xdf,0xef,0x7d,0x6d,0x2b,0x5a,0x5d,0xd2,0xdf,0xf6,0x92,0xb6,0xb2,0xb3,0xac,0xa1,
++0xfb,0xdf,0xfe,0xf1,0xee,0xf5,0xf6,0xbc,0x6b,0xbd,0x7d,0xaf,0x1a,0xef,0x5f,0x6b,
++0xc6,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,
++0xf6,0xff,0xf6,0xb7,0xfd,0xad,0xfd,0xbf,0xf3,0x6f,0xff,0x6f,0xff,0xdb,0xd1,0xfd,
++0xbf,0xff,0x6f,0xf5,0x6b,0xbc,0x5b,0x3c,0xda,0xef,0x16,0xaf,0x16,0xff,0xcd,0xab,
++0xff,0x6f,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfc,0xbf,0xff,0xff,
++0xff,0x6c,0x03,0x10,0xc1,0xf3,0xff,0xf3,0x3a,0xf3,0xca,0xff,0xaf,0xf1,0xff,0xff,
++0xff,0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff,
++0xff,0x5f,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,
++0xea,0x0f,0x50,0xc3,0xf3,0x7f,0xff,0xf3,0xf3,0xc3,0xff,0xaf,0xf1,0xff,0xff,0xff,
++0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff,0xff,
++0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x5f,0xc1,
++0x3f,0xf7,0x5e,0xf5,0xce,0x9e,0x5f,0x3f,0x17,0xff,0xf3,0xe1,0xff,0xff,0xff,0xff,
++0xd8,0xff,0xfa,0xfe,0x67,0xff,0xfe,0xbf,0x5a,0xff,0xff,0xaf,0xf5,0xff,0xff,0xff,
++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfd,0xff,0xf7,0xff,0xfd,0x4e,0x3d,
++0x3f,0xe7,0x0b,0xbf,0x8f,0xf9,0xff,0xeb,0xe3,0xff,0xe1,0xff,0xff,0xfc,0xff,0xc7,
++0x9f,0xff,0x3e,0x39,0xe5,0xff,0xcf,0x9b,0xf9,0xff,0xff,0xc5,0xff,0xff,0xfa,0xf0,
++0x5f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
++0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x20,
++0x00,0x01,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xf0,0x4f,
++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xbf,
++0x3f,0xff,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf1,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,
++0xff,0xed,0xff,0xfb,0xfe,0xff,0x7f,0xff,0x7f,0xdf,0xff,0xff,0xdd,0xf0,0x3f,0xff,
++0xff,0xff,0xfe,0xf0,0xff,0xff,0xf3,0xff,0xf7,0xff,0xfe,0x5f,0xff,0xf7,0xff,0xff,
++0xdf,0xff,0xff,0xff,0xf7,0xfe,0x7b,0xf1,0xff,0xfd,0xfd,0xff,0xdf,0xdf,0xff,0x7d,
++0x73,0xf9,0xff,0xc3,0x7e,0xfe,0xff,0xef,0xd7,0xff,0xcf,0xd0,0xf0,0x6f,0xff,0xff,
++0xff,0xfe,0xf8,0x30,0x00,0x00,0x40,0x04,0x00,0x01,0x41,0x20,0x00,0x04,0x00,0x02,
++0xd5,0x09,0x00,0x02,0x80,0x02,0x01,0x00,0x00,0x00,0x0a,0x04,0x00,0x07,0x00,0x01,
++0x50,0x01,0x80,0x02,0x61,0x40,0x41,0x0c,0x14,0x08,0xc1,0xf0,0x9f,0xff,0xff,0xff,
++0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xdf,0xcb,0x5f,0xfe,0xef,0xff,0xfe,
++0xff,0x3f,0xff,0x7f,0xfd,0xc1,0xff,0xff,0x7f,0xff,0xdf,0xfd,0xfc,0xfd,0xf7,0xee,
++0xff,0xff,0x4e,0xff,0xdf,0xcf,0xdb,0xeb,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0x7f,
++0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,
++0xf7,0xfb,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0x7f,0xff,0xff,0xff,0x7f,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdd,0xff,
++0xff,0xff,0xa5,0xff,0x6f,0x6b,0xe9,0x6f,0xda,0xca,0xfb,0xdd,0xee,0xf7,0xf6,0xb2,
++0xb3,0xa4,0xa1,0x5b,0x5b,0xf6,0xd7,0xf4,0xf7,0x7b,0xbd,0xbd,0xad,0xcf,0xef,0x7f,
++0x6b,0x7f,0x3b,0xdf,0xdb,0xff,0xff,0x30,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
++0xff,0xff,0xff,0xf6,0xfe,0x96,0xff,0xfd,0xb5,0xfd,0xbf,0xad,0x7f,0xff,0x6f,0xff,
++0xde,0xd1,0xad,0xad,0xe9,0xff,0xf1,0xec,0xef,0xde,0x3f,0xcb,0xff,0xf6,0xff,0x32,
++0xff,0xc5,0xbd,0xff,0xff,0xff,0xd0,0xbf,0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xf4,
++0x28,0xbf,0xff,0xfd,0xfb,0xd3,0xff,0xff,0x42,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3,
++0xc1,0xff,0x33,0xff,0xc0,0x15,0x6b,0x70,0xff,0xf0,0xf2,0x4f,0xff,0xfc,0x3e,0x97,
++0x3c,0xff,0xff,0xfd,0xef,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x78,
++0xbf,0xff,0xfd,0xf3,0xef,0x55,0xff,0x7e,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3,0xc1,
++0xff,0x33,0xff,0xc0,0x15,0x6f,0xff,0x0f,0xf0,0xf0,0x0f,0xff,0xfc,0x3d,0x6b,0xc3,
++0xff,0xff,0xfe,0xf7,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,
++0xff,0x23,0xf8,0x7f,0xff,0x4e,0xff,0xff,0xff,0xfb,0xf9,0x17,0xff,0xf6,0xf1,0xff,
++0xcf,0xef,0xff,0xff,0x13,0xdf,0xe6,0x2f,0xc7,0xff,0xff,0xe7,0xc1,0xfd,0xff,0xfe,
++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xfe,0xae,0xff,
++0xff,0x7f,0x3b,0x3f,0xfc,0x7f,0xfc,0xef,0xff,0xfc,0xe2,0x7b,0xff,0xf1,0xfd,0xed,
++0xef,0xff,0xff,0x35,0x73,0xff,0xff,0xfe,0xfa,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
++0xff,0xfa,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x0c,0x04,0x01,0x40,0x40,0x00,
++0x00,0x30,0x28,0x04,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,
++0x38,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xfb,0xff,0x7f,
++0xff,0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xdf,0xdf,0xff,
++0xff,0xff,0xff,0xed,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xff,0xff,0xc3,
++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xfd,0xff,0xbf,0xff,0xff,0xfd,0xff,0xff,
++0xff,0xff,0xff,0xfd,0x7b,0xff,0x7f,0xff,0xbd,0xff,0xf1,0xef,0xff,0xff,0xfd,0xdf,
++0xfd,0xfb,0xff,0xff,0xbf,0xbe,0xff,0xcd,0x7f,0xfc,0xf7,0xf7,0x6f,0xbf,0xd8,0xf0,
++0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,0x00,
++0xc0,0x00,0x00,0x20,0x34,0x00,0x00,0x00,0x0c,0x81,0x00,0x20,0xa4,0x20,0x00,0x10,
++0x08,0x04,0x48,0x08,0x00,0x40,0x93,0x00,0x10,0x00,0x38,0x18,0x20,0xc1,0xf0,0x3f,
++0xff,0xff,0xff,0xfe,0xff,0xfb,0xff,0xff,0xb9,0xdf,0xfe,0xb3,0xff,0xff,0xe7,0xfd,
++0xff,0xff,0x3b,0xff,0x7f,0xff,0xbf,0xff,0xc1,0xff,0xfc,0xff,0xff,0x3f,0x77,0xfe,
++0xfe,0xcf,0xff,0xbf,0xfd,0xbf,0xff,0xfe,0xed,0xf2,0xfd,0xf7,0xff,0xf0,0x2f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xf3,0xad,0xcf,0xef,0x70,0xc9,0x73,0x3b,0xdf,0x5b,0x4a,
++0xf6,0xb7,0xfe,0xd7,0xf5,0xbc,0xc1,0x33,0xca,0xd6,0xb7,0x6e,0xf7,0xfb,0xbd,0xc5,
++0x24,0xcf,0x6f,0x2f,0x4d,0x2b,0xba,0x5a,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,
++0xfe,0xbf,0xff,0xff,0xff,0xff,0xf6,0xf6,0xd7,0xff,0xff,0xad,0xbd,0xff,0xff,0xff,
++0xef,0xf7,0x7f,0xfc,0x5b,0xb1,0xfd,0xbd,0x75,0x6f,0xef,0x6a,0xfd,0x5b,0xfb,0xdb,
++0x3a,0xbf,0x8e,0x9f,0xff,0xbf,0xfd,0xff,0x6f,0xff,0xd0,0x6f,0xff,0xff,0xff,0xfe,
++0xff,0xbb,0xff,0xf0,0x3f,0xff,0xff,0xfd,0xfb,0x7f,0xde,0xff,0xff,0x5a,0xd6,0xbf,
++0xd8,0x2a,0xbf,0xbf,0xf1,0xe5,0xff,0xcc,0xc0,0xa9,0x70,0xff,0xf3,0x3c,0x3c,0xfd,
++0x57,0xfd,0x98,0x03,0x00,0xc3,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0x3d,0xbf,0xff,0xfd,0xfb,0xff,0xdb,0xff,0xff,0x0f,0xfc,0x3f,0xd8,
++0x2a,0xbf,0xbf,0xf1,0xef,0xff,0xcc,0xc0,0x96,0xbe,0xff,0xf3,0x3f,0xff,0xfd,0x57,
++0xfd,0x99,0x0f,0xff,0xc3,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xf1,0xe7,0xff,0xff,0xf3,0x8e,0x7b,0xff,0xa8,0xff,0xdf,0x7f,0x8e,0x78,0x73,
++0xff,0xf1,0x51,0x62,0xff,0xfc,0x4b,0xff,0xf3,0xff,0x7e,0xcf,0xf9,0xff,0xfd,0xff,
++0xff,0x7f,0xff,0xe0,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,
++0xfb,0xfd,0xae,0xff,0xfc,0xfe,0x6f,0x3f,0xf8,0xfd,0x77,0xaf,0xfe,0x37,0xfe,0x7b,
++0xff,0xb1,0x8c,0xff,0xef,0xfd,0xf8,0xe7,0xbf,0xff,0xf1,0xfe,0x3e,0xf7,0xfe,0x95,
++0x3e,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00,
++0x01,0x04,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x08,
++0x41,0x80,0x10,0x00,0x00,0x08,0x10,0x84,0x00,0x0c,0x04,0x02,0x61,0x00,0x00,0x81,
++0x00,0x00,0x00,0x00,0x3d,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,
++0xff,0xff,0x7f,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0x7f,0xbf,0xf7,0x7f,0xef,0xff,0xef,0xff,0xf7,0xfd,0xff,0xff,0xfd,0x7f,0xff,0xbe,
++0xdf,0xff,0xff,0xd9,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0x7f,0xfb,0xff,
++0xfb,0xff,0xbf,0xff,0xf3,0x7f,0xfb,0xfd,0xeb,0x7f,0xdf,0xfa,0xff,0xde,0xf0,0xed,
++0xff,0xb1,0xf7,0xf9,0x1f,0xb5,0x5b,0xfe,0x7e,0xf7,0xbe,0xfd,0x7f,0x5f,0xb5,0xf7,
++0xff,0xff,0xd0,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x01,0x00,0x07,0x42,0x01,
++0x00,0x6a,0x18,0x50,0x80,0x00,0x00,0x02,0x40,0x01,0x01,0x20,0x01,0x01,0x24,0x14,
++0x21,0x10,0x02,0x08,0x07,0x08,0x00,0x40,0x10,0x80,0x58,0x00,0x84,0x80,0x18,0x10,
++0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xff,0xdb,0xb7,0xf3,
++0xdf,0x7c,0xf8,0x74,0xff,0xff,0x6f,0x7d,0x3f,0x7e,0xec,0x7f,0xc1,0xf5,0xff,0xcf,
++0x6f,0x9f,0xf9,0xdf,0xbe,0xe5,0xe7,0xff,0xd7,0xf3,0xdd,0xfb,0xff,0xfc,0xff,0xbf,
++0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xff,0xb4,0xcf,0xef,0x77,0x6f,0x73,
++0x3a,0x4a,0x3a,0xcb,0xd4,0xf7,0x2e,0xd6,0xbd,0xbd,0xa1,0x3b,0xdf,0xd6,0xf7,0xee,
++0xd3,0x35,0xbd,0xfb,0xbd,0xce,0xeb,0x2b,0x4d,0x2f,0xbb,0xda,0xff,0xff,0xfe,0xb0,
++0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdf,0x5f,0x36,0xaf,0x3f,0xed,0xb7,
++0xf5,0xfd,0xf3,0x2b,0xef,0x77,0xff,0xfb,0xda,0xb1,0xbd,0xa3,0x77,0x69,0x7f,0x4f,
++0xff,0xdb,0xfa,0x5b,0xff,0xf2,0xfe,0xff,0x96,0xff,0xff,0xfe,0xdf,0xff,0xd0,0xaf,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x8f,0xfd,0x40,0x6f,0x9e,0x83,0x5a,0x0f,
++0xfa,0xc3,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xd0,0x00,0xfe,0xbf,0xcd,0x3f,0xf0,
++0xef,0xfc,0xc5,0x0c,0x3f,0xfd,0x68,0x0b,0xff,0xff,0xff,0xfe,0xdf,0xf0,0xff,0xff,
++0xff,0xff,0xfe,0xff,0xbb,0xff,0xfd,0x85,0xff,0xd4,0x6f,0x9f,0xc3,0x5a,0x0f,0xff,
++0xff,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xf0,0xfb,0xc2,0xbf,0xfc,0x00,0x37,0xef,
++0xfc,0xcd,0xbc,0x3f,0xff,0x0c,0xbf,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xd9,0xf7,0xd1,0xb7,0x7e,0x7f,0xf1,0xe4,0xfd,0xff,
++0xfb,0xfb,0xff,0x5f,0xff,0x7f,0xb1,0xbc,0x0f,0x67,0xeb,0xb8,0x3f,0xff,0xe2,0xff,
++0xe9,0xff,0xfd,0xe3,0xff,0x3f,0x9f,0xc2,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,
++0xfe,0xf5,0x7f,0xff,0xf0,0x3f,0xbc,0xff,0xd5,0xf5,0xce,0x3f,0xfe,0xff,0xfe,0x6d,
++0xff,0xf1,0xbf,0x7b,0xff,0xf1,0xfd,0xff,0x4f,0xff,0x87,0xff,0xae,0xff,0xb1,0xf8,
++0xfe,0xff,0xff,0x78,0x01,0xb9,0xff,0xff,0xff,0xfa,0xf0,0x2f,0xff,0xff,0xff,0xfe,
++0xf3,0xc0,0x00,0x00,0x00,0x04,0x02,0x13,0x02,0x00,0x80,0x40,0x00,0x90,0x10,0x00,
++0x10,0x00,0x02,0x00,0x01,0x20,0x80,0x12,0x10,0x00,0x40,0x08,0x00,0x04,0x00,0x00,
++0x02,0x00,0x01,0x40,0x00,0x80,0x00,0x00,0x3c,0xf0,0xef,0xff,0xff,0xff,0xfe,0xfd,
++0x1f,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xf7,0xdf,0xf7,0xff,
++0xf7,0xfb,0xeb,0xd1,0xff,0xff,0xff,0xff,0xef,0xf7,0xff,0xff,0xfb,0xff,0xfe,0xff,
++0xff,0x7e,0xff,0xfb,0xff,0xff,0xff,0xdb,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf0,0xff,
++0xff,0xb7,0xeb,0xf7,0xdf,0xff,0xfe,0xf5,0x6b,0xe7,0xed,0xf7,0x3e,0xec,0xff,0x54,
++0xef,0x6f,0xf1,0xf5,0xaf,0x6f,0xf6,0xfd,0xff,0xdd,0x7b,0xff,0xef,0xbf,0x7f,0xff,
++0xff,0xf7,0xff,0xf3,0x5f,0xf7,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,
++0x80,0x40,0x04,0x00,0x81,0x2c,0x04,0x24,0x00,0x02,0x01,0xc8,0x02,0x00,0x02,0x24,
++0x00,0x01,0xb4,0x42,0xdc,0x44,0x02,0x15,0x90,0x02,0x03,0x48,0x39,0x10,0x02,0x24,
++0xa0,0xba,0x00,0x00,0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xfe,0xfc,0xf7,0xf0,0xee,0xb6,0x5d,0xfd,0xf5,0xff,0xdb,0xf7,0x7f,0x7f,0xbe,0xff,
++0xc1,0xfe,0xbf,0xfa,0xfa,0x5f,0xff,0xad,0xff,0xef,0xff,0x7f,0xdf,0x7f,0xfe,0xbf,
++0xb7,0x94,0xbf,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xfb,0xb5,0xff,
++0xef,0x7c,0xeb,0x2b,0x52,0x5b,0x3b,0xda,0xd4,0xf3,0x36,0x96,0xb5,0xbd,0xf1,0xfb,
++0xda,0xee,0xf6,0xfe,0xd3,0x35,0xbd,0xdf,0xad,0xcf,0xef,0x7e,0xcd,0x6b,0xbb,0xdf,
++0xff,0xff,0xfd,0xb0,0xef,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xd3,0x5f,0xf6,
++0xff,0xf6,0xff,0xfd,0xad,0xfd,0xff,0x7f,0xef,0xff,0x6f,0x7f,0xdb,0xf1,0xa5,0xa3,
++0x7f,0x6f,0x6b,0x4f,0xff,0xdb,0xfb,0xcb,0xff,0xf6,0xff,0xf4,0xd7,0xfd,0xbf,0xfe,
++0xdf,0xff,0xd0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdf,0xff,0xff,0xff,
++0x3f,0x7f,0xfc,0xe5,0xff,0x20,0xfe,0xff,0xff,0xdf,0x7f,0xff,0xf1,0x7f,0xff,0xfe,
++0xff,0xf0,0x7c,0x3d,0x4f,0xf3,0xc3,0x3f,0xff,0xff,0x6f,0xc3,0xff,0x0f,0xff,0xff,
++0xaf,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0xb7,0xe0,0x0f,0xff,0xff,0x2b,
++0xff,0x7d,0xbf,0xff,0xdf,0xff,0xff,0xf8,0x9f,0x7f,0xff,0xf1,0x55,0xff,0xff,0xff,
++0xfd,0x7c,0x3c,0xff,0xf3,0xc3,0x3f,0xff,0xff,0xef,0xc3,0xff,0xdf,0xff,0xff,0xff,
++0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x9f,0xbf,0x7f,
++0xf9,0x19,0x47,0x8e,0xe7,0x9f,0x3f,0x17,0xff,0xfc,0x81,0xc1,0x7e,0xf3,0xd9,0xf9,
++0x73,0xdf,0xf4,0x7f,0xfa,0xff,0xff,0xff,0xfb,0x7f,0x77,0xc7,0xff,0xff,0xff,0xf0,
++0x2f,0xff,0xff,0xff,0xfe,0xf5,0xf7,0xff,0xfb,0xff,0xf7,0x3f,0xfc,0xbf,0x3e,0x3f,
++0xec,0xff,0x81,0xaf,0xfe,0x4f,0xf3,0xbb,0xff,0xf0,0x7e,0xff,0x6f,0xff,0x87,0xff,
++0xbb,0xff,0xd5,0xfc,0xff,0x7f,0xfc,0x6f,0xff,0xef,0xe7,0xff,0xff,0xfa,0xf0,0x3f,
++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
++0x00,0x30,0x10,0x60,0x20,0x00,0x08,0x00,0x01,0x20,0x80,0x00,0x10,0x00,0x04,0x00,
++0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x40,0x00,0x08,0x20,0x3c,0xf0,0x6f,0xff,
++0xff,0xff,0xfe,0xf5,0xbf,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x3f,0xff,
++0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xf1,0xdf,0xdf,0xff,0xff,0xff,0x7f,0xdf,0xff,
++0xfd,0xbd,0xff,0xff,0xff,0xfb,0xdf,0xff,0xff,0xff,0xff,0x5b,0xf0,0xff,0xff,0xff,
++0xff,0xfe,0xf0,0xbf,0xbf,0xbf,0xff,0xf7,0xfb,0xff,0xfe,0xee,0xfa,0xff,0xff,0xff,
++0x3d,0x3b,0xff,0xff,0xfe,0xfb,0xf1,0xff,0xbf,0x7b,0xff,0xff,0xef,0xff,0xbf,0xff,
++0xff,0xff,0xff,0xff,0xfe,0xff,0xf7,0xef,0xff,0xfb,0xd0,0xf0,0xdf,0xff,0xff,0xff,
++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x00,0x0b,0x10,0x05,0x01,0x00,0x08,0x00,0x02,
++0x01,0x01,0x00,0x00,0x10,0x01,0xc8,0x08,0x00,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
++0x00,0x80,0x02,0x00,0x00,0x40,0x24,0x80,0x00,0xc1,0xf0,0x3f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xf7,0xfd,0xf7,0xfa,0xef,0xee,0xf9,0xfd,0xff,0xf7,0xfe,0xbf,
++0x1f,0xfd,0x9e,0xfd,0xd1,0xef,0xff,0xf7,0x7f,0x9f,0xff,0xef,0xff,0xf6,0xff,0xfe,
++0xfe,0x7b,0xff,0xbd,0xff,0x7e,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xf7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xdf,0xfd,0xff,0xff,0xdf,0xff,
++0xff,0x5f,0xf1,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xef,0xff,
++0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfb,0xff,0xff,0xef,0xfb,0xfd,
++0xff,0xf1,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf7,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xe7,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xfb,0xff,0xfb,0xf1,
++0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0xff,0x7f,0xff,0xf1,0xff,
++0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x57,0xff,0xfe,0xbf,0xfb,0xf1,0xff,0xff,
++0xfd,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xd7,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd,
++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xef,0x2f,0xf1,0x3c,0xbf,0xbc,
++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff,
++0x01,0xe2,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff };
+diff -u --recursive --new-file linux.prev/drivers/net/hamradio/yam9600.h linux/drivers/net/hamradio/yam9600.h
+--- linux.prev/drivers/net/hamradio/yam9600.h Thu Jan 1 00:00:00 1970
++++ linux/drivers/net/hamradio/yam9600.h Sat Sep 12 22:03:34 1998
+@@ -0,0 +1,343 @@
++/*
++ *
++ * File yam111.mcs converted to h format by mcs2h
++ *
++ * (C) F6FBB 1998
++ *
++ * Tue Aug 25 20:23:03 1998
++ *
++ */
++
++static unsigned char bits_9600[]= {
++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xfb,0xcb,0xff,0xdb,0xfe,0xf2,
++0xff,0xf6,0xff,0x9c,0xbf,0xfd,0xbf,0xef,0x2e,0x3f,0x6f,0xf1,0xfd,0xb4,0xfd,0xbf,
++0xff,0x6f,0xff,0x6f,0xff,0x0b,0xff,0xdb,0xff,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff,
++0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xfd,0xdf,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,
++0xfb,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0x7f,0xf1,0xff,0xfe,0xff,0xbf,0xbf,
++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xf0,
++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xf7,
++0xff,0xff,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0x7e,0xff,0xff,
++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0xdf,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xef,0xff,0xf3,0xfb,0xfe,0xff,0xf1,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xdf,0xff,0xf0,0x7f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,
++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0x7f,0xff,0xef,
++0xff,0xef,0xff,0x7f,0xef,0xf1,0xff,0xef,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xbd,0xff,0xef,0x7f,0xef,0x7f,0xfb,0xdf,0xd3,0x5a,0xfe,0xd7,0xd6,
++0xf7,0x7f,0xbd,0xf1,0xbb,0x5d,0xd6,0xf7,0xfe,0x96,0xff,0xbd,0xaf,0xad,0xbf,0xef,
++0x7f,0x6b,0x7f,0xfb,0xd6,0xfe,0xf7,0xff,0x10,0xef,0xff,0xff,0xff,0xfe,0xbe,0xef,
++0xff,0xff,0xdb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xbf,0xff,0x7f,0xff,0x7f,
++0xdf,0xdb,0xf1,0xfd,0x35,0xff,0x6f,0xff,0x6f,0xff,0xdb,0xff,0xcb,0xff,0xf6,0xff,
++0xf2,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff,
++0xff,0xf1,0x24,0xf0,0xff,0xff,0xcf,0xef,0x3f,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff,0xff,
++0xf1,0x00,0xf0,0xff,0xff,0xcf,0xdf,0xff,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f,0xff,
++0xff,0xff,0x7d,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfe,0x7f,0xdf,0xff,0xff,0xff,0xf1,
++0xff,0xcf,0xff,0xf3,0xff,0x97,0xff,0xff,0x8f,0xe7,0xff,0xff,0xfc,0x71,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xf7,0xef,0xff,0xff,0xfc,0x7b,0xff,0xf1,0x3f,
++0xff,0xef,0xff,0xcf,0xe3,0xe3,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xbf,0xff,
++0xbf,0xff,0xda,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
++0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0x9f,0xff,
++0xff,0xff,0xf7,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xdb,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xdf,0xbf,0xf1,0xfe,0xfd,0xf7,0xff,
++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xfd,0xf2,
++0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
++0x00,0x00,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x04,0x24,0x00,
++0x40,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0xc0,0xf0,
++0x4f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xbf,0xff,0xff,0x6f,0xff,0xdf,0xff,0xd1,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xdf,0xff,0xfb,0xff,0xfb,0xef,0xff,0xff,0xee,0xff,0xff,0x7f,0xf0,0xdf,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xad,0xff,0x69,0x2a,0xed,0x6b,0xfb,0xdf,0x3a,
++0xdc,0xf4,0x96,0xee,0xb3,0x3d,0x35,0xc1,0xbb,0xdd,0xfe,0xf6,0xfe,0xd6,0xb5,0xad,
++0xbf,0xa5,0xad,0x49,0x2f,0x4f,0x2b,0xda,0x5f,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,
++0xff,0xfe,0xbf,0xff,0xff,0xfb,0x5b,0xf7,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xa5,
++0xf3,0x6f,0xf3,0x6e,0xfa,0x7b,0xd1,0xfd,0xb5,0x77,0x6f,0xe9,0x6f,0xff,0xdb,0xfb,
++0xdb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0x3f,0xfe,0xf7,0xff,0xd0,0x4f,0xff,0xff,0xff,
++0xfe,0xff,0x9f,0xff,0xff,0x0f,0xff,0xc0,0x3f,0x9c,0x03,0xff,0xff,0x8b,0xa5,0xfe,
++0x80,0x3e,0xc2,0xbf,0xac,0xb1,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xa3,
++0xff,0xfd,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0x0f,0xff,0xc0,0x3f,0xd4,0x6b,0xff,0xff,0xdb,0xff,0xfe,0x86,
++0xbf,0xc2,0xbf,0x30,0xa1,0x24,0xff,0xff,0xff,0xff,0xcc,0xff,0x0f,0xff,0xa3,0xff,
++0x05,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xfb,0xc7,0xff,0xc4,0xff,0xff,0x7f,0xff,0xec,0xfe,0x7f,0xdf,0xd8,0xb9,
++0x47,0xfc,0x36,0xc1,0xdf,0xff,0xff,0xf9,0xff,0xf3,0xff,0xf7,0xff,0xfc,0xff,0xfd,
++0x3f,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff,
++0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xbd,0x3f,0xff,0x2b,0xfe,0x2f,0xf5,0xa3,0xfc,
++0x5b,0xfe,0x61,0x9f,0x7f,0xef,0xff,0xff,0xa7,0xfb,0xff,0xff,0xfa,0xfe,0xff,0x33,
++0xf1,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x24,0x04,
++0x00,0x01,0x00,0x80,0x40,0x00,0x08,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x02,0x00,
++0x00,0x00,0x00,0x00,0x01,0x3d,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xfd,0xbd,0xff,0xfd,
++0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f,0xf6,0xef,0xbf,0xf7,0xff,0x73,0xeb,
++0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xfd,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xd9,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0,0xbf,0x7f,0xff,0xff,
++0xff,0x7f,0xff,0xff,0xde,0xff,0xff,0xef,0xdd,0xde,0x77,0xf2,0xfb,0xed,0xe7,0xf1,
++0x73,0xfd,0xfd,0xdf,0xff,0x7d,0xbe,0xdf,0xff,0xfb,0xff,0xef,0xff,0xef,0xff,0xff,
++0xff,0xff,0xff,0xd0,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x02,0x00,0x22,
++0x40,0xc0,0x00,0x00,0x00,0x08,0x00,0x02,0x41,0x02,0x12,0x00,0x21,0x87,0x81,0x00,
++0x00,0x80,0x04,0x0b,0x28,0x01,0xb0,0x00,0x82,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,
++0xf7,0xff,0xfe,0x7f,0xed,0x79,0xff,0xde,0xeb,0x7f,0x74,0xf7,0xf7,0xe1,0xf9,0xff,
++0xf6,0x5f,0x7f,0xff,0xff,0xff,0xd7,0xdb,0xef,0xff,0xbb,0xff,0xff,0xff,0xcc,0xff,
++0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x3d,0xcd,0x49,0x7f,0x6f,
++0x2b,0xba,0x5c,0xd2,0xda,0xf6,0xf3,0x3e,0xf7,0xff,0xbd,0xf1,0xfa,0xdf,0xfe,0xf7,
++0xcc,0xf6,0xbb,0xa5,0xb3,0xad,0xbf,0x6f,0x7d,0x6f,0x6b,0xdb,0xdf,0xbd,0xff,0xfe,
++0xb0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xfb,0xdb,0x57,0xf6,0xfe,0x9f,0xd5,
++0xb7,0xff,0xaf,0xe5,0x3f,0xff,0xff,0x6f,0xff,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0x69,
++0x6c,0xdf,0xda,0xdf,0xcb,0xff,0xf6,0xff,0x76,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0,
++0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfd,0xbd,0x08,0x03,0x89,0x4f,0x5a,
++0x0f,0xf0,0xff,0xf8,0xbf,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xf3,
++0xfa,0xa0,0xf0,0xf2,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xfd,0x00,0x6b,0xff,0xff,0x5a,0x0f,
++0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xb3,0xf5,
++0x50,0xf0,0xf0,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xbc,0xff,0xe4,0xe7,0x71,0xff,0xf9,0xc4,0xf4,
++0x7f,0x7f,0xcf,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xfb,0xf7,0x73,0xbf,0x14,
++0xff,0xe6,0xff,0xff,0xe1,0x7d,0xff,0xff,0xe7,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,
++0xff,0xfe,0xf5,0xff,0xff,0xfe,0xd2,0xfa,0xff,0xc4,0xf4,0x5c,0xbf,0xfa,0xff,0xff,
++0xec,0x7e,0xbf,0xff,0xff,0xff,0xf1,0xff,0xff,0xef,0xff,0xff,0x6b,0xdb,0xff,0xdf,
++0xf9,0xfb,0xbf,0xff,0xf1,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf0,0xbf,0xff,0xff,0xff,
++0xfe,0xf3,0xc0,0x00,0x02,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x80,0x00,
++0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x20,0x00,0x00,0x00,0x00,
++0x01,0x00,0x01,0x00,0x00,0x80,0x02,0x00,0x01,0x3c,0xf0,0x5f,0xff,0xff,0xff,0xfe,
++0xfd,0xbf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0x7f,0xff,0xdf,0xff,0xef,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xc3,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf0,
++0xff,0xdf,0xff,0xff,0xf7,0x23,0xff,0xff,0xfd,0xff,0xef,0xff,0xfe,0x7f,0x7d,0xf7,
++0xfe,0xff,0x7f,0x71,0xff,0xfb,0x7f,0xff,0xff,0xff,0x6e,0xfd,0xf7,0xfd,0xff,0xbf,
++0xff,0xbf,0xf9,0xfd,0xff,0xdf,0xef,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x30,
++0x40,0x01,0x00,0x83,0x00,0x00,0x00,0x0c,0x06,0x08,0x04,0x26,0x26,0x00,0x00,0x06,
++0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x70,0x08,0x80,0x00,0x20,0x01,0x20,
++0x00,0x02,0x00,0x30,0x00,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0x7b,0x3f,0xf7,0xff,0xd7,0xfe,0xfe,0xfb,0xfe,0x3b,0xfe,0xbd,0xff,0x2f,
++0xff,0x71,0xff,0xfb,0x7f,0xe7,0xff,0xf9,0xef,0xff,0xd7,0xfa,0xff,0xb7,0xbb,0xfe,
++0xff,0xff,0x74,0xff,0xf7,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xb5,
++0xbd,0x6f,0x7c,0xeb,0x7f,0xfb,0xdb,0xd3,0x4b,0xee,0xd6,0xf6,0xb7,0xfd,0xac,0xa1,
++0xfb,0xdf,0xfe,0xf7,0xf4,0x96,0xbd,0xb4,0xc5,0xa5,0xaf,0x6f,0x69,0x4f,0x7f,0xba,
++0xdb,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,
++0xf6,0xff,0xf6,0xff,0xbd,0xbf,0xa5,0xbf,0xff,0x7d,0x7f,0xef,0xff,0xfb,0xf1,0xfd,
++0xbf,0xff,0x6f,0xff,0x6b,0x7a,0xdb,0xff,0xdb,0xdf,0xf6,0xfe,0xb6,0xfd,0xfd,0xbf,
++0xfe,0xf7,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf4,0x2f,0xff,
++0xfc,0x43,0x6b,0xff,0xff,0xff,0x0d,0xff,0xfc,0x33,0x3f,0xf0,0x5f,0xf1,0xff,0xff,
++0xff,0xff,0xf9,0xde,0xf0,0x4c,0xfe,0x77,0xaf,0xff,0xff,0xef,0xff,0xf0,0xff,0xdb,
++0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xfe,0xf7,0xff,0xf0,0x2f,0xff,0xfd,
++0x43,0x7f,0xff,0xff,0xf1,0x0f,0xff,0xfc,0x33,0x3f,0xff,0xaf,0xf1,0xff,0xff,0xff,
++0xff,0xf6,0xd7,0xff,0xbc,0xfd,0xbd,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,
++0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xfb,0xf1,
++0xbf,0xff,0xf9,0xfd,0xcf,0xf2,0x70,0xff,0x1f,0x9f,0xf3,0xf1,0xff,0xff,0xff,0xff,
++0xfc,0xf7,0xff,0x13,0x9f,0xfc,0xff,0xff,0x84,0xf7,0xff,0xff,0x47,0xff,0xff,0xff,
++0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xf1,0xfc,0xff,0xfe,0xfe,0x79,
++0x3f,0xff,0x1d,0x46,0xcf,0xff,0xcf,0xfc,0x7b,0xff,0xf1,0xff,0xff,0xff,0xff,0xed,
++0xf3,0xab,0xff,0xcb,0xff,0xf8,0xff,0xfc,0xf5,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,
++0x8f,0xff,0xff,0xff,0xfe,0xf3,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
++0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x20,
++0x0c,0x00,0x00,0x04,0x01,0x00,0x01,0x00,0x00,0x80,0x00,0x00,0x01,0x3c,0xf0,0x7f,
++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff,
++0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xef,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,
++0xff,0xdf,0xff,0xff,0xfb,0xf7,0x7f,0xff,0xfe,0xff,0xff,0xbf,0xdb,0xf0,0xff,0xff,
++0xff,0xff,0xfe,0xf0,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0x7f,0xf7,0xff,
++0xbf,0xbf,0xcf,0xff,0xff,0xff,0x3e,0xf1,0x7f,0xff,0xff,0xef,0xff,0xff,0xff,0xfe,
++0xff,0xfd,0xff,0xbf,0xbd,0xfe,0xff,0xfb,0xf7,0xdf,0xfb,0xd0,0xf0,0x9f,0xff,0xff,
++0xff,0xfe,0xf8,0x30,0x20,0x00,0x40,0x01,0x80,0xc0,0x30,0x00,0x00,0x20,0x00,0x10,
++0x50,0x88,0x20,0x00,0x00,0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
++0x00,0x00,0x01,0x80,0x08,0x00,0x00,0xa0,0x00,0x10,0xc1,0xf0,0xef,0xff,0xff,0xff,
++0xfe,0xfd,0xef,0x7f,0xff,0xff,0xbf,0xff,0xf7,0xff,0xef,0xfb,0xfd,0x77,0xef,0xbf,
++0xf7,0x7f,0xff,0xff,0xbf,0xd1,0x7f,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xaf,0xff,
++0xdf,0xf7,0xfb,0xff,0xfd,0xff,0xfc,0xff,0xfd,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x3f,0xff,0xff,0xff,0xfe,0xdd,0xff,
++0xff,0xff,0xa5,0xfd,0x6f,0x7d,0x6d,0x7f,0x52,0xdf,0x5a,0x4b,0xee,0xb6,0xee,0xf2,
++0xbb,0xac,0xa1,0x5b,0x4d,0xd6,0xf7,0xfe,0xb2,0xbd,0x35,0xb5,0xb5,0xdd,0x6f,0x7f,
++0xe9,0x5f,0x52,0xdf,0xbd,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
++0xff,0xdb,0xfe,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xb5,0xbf,0xf9,0x7f,0x6f,0xff,
++0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0x69,0x7f,0xdb,0xff,0xd3,0xff,0xf6,0xfe,0xf2,
++0xff,0xad,0xbf,0xff,0xff,0xff,0xd0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,
++0x30,0x0f,0xff,0xff,0xfd,0x6b,0xca,0xff,0xf0,0x0f,0xd6,0xbf,0xcf,0x3f,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xca,0xfe,0xbf,0xff,0xf0,0x05,0xaf,0x0f,0xff,0xfc,0xf0,0xcf,
++0xf0,0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0x30,
++0x0f,0xff,0xff,0xfc,0x3f,0xca,0xff,0x0f,0x0f,0xd6,0xbf,0xff,0xff,0xf5,0x5f,0xf1,
++0xff,0x8b,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xfc,0xf0,0xcf,0xf0,
++0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xcf,0xff,
++0xff,0xbf,0x9f,0x3f,0xfe,0xfc,0xff,0x4f,0xff,0xff,0xff,0xff,0xff,0xf7,0xf1,0xff,
++0xdf,0xfe,0x7e,0x3f,0x9f,0xf4,0xfc,0x7f,0xfc,0xff,0xff,0x3f,0xff,0x3f,0xfe,0x3f,
++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfb,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xbf,0xfb,0xff,0xf8,0xed,0xff,0x8f,0xff,0xbb,0xff,0xb1,0xf3,0xef,
++0x8f,0xf7,0xff,0xff,0xdb,0xff,0xff,0xff,0xef,0xbf,0xfd,0x79,0xbf,0xbf,0xff,0xff,
++0xff,0xfb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x04,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x04,0x08,0x08,0x01,0x01,0x00,0x90,
++0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x00,0x01,
++0x3c,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0x9f,0xff,0xaf,0xdf,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,
++0xbf,0xef,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xbf,0xff,0xff,0xff,0xc3,
++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xfd,0xff,0xff,0xff,0xfb,0xff,0xbb,0xff,
++0xff,0xff,0x7f,0xf6,0xff,0x7f,0xfb,0xfd,0xed,0xff,0xf1,0xff,0xfe,0x7f,0xff,0xff,
++0xff,0x5f,0xff,0xf7,0xff,0x7e,0xff,0xfd,0xff,0xef,0xff,0xff,0xff,0xef,0xf0,0xf0,
++0x8f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x80,0x00,0x04,0x00,0x00,0x40,0x02,0x00,0x03,
++0x00,0x05,0x04,0x20,0x00,0x00,0x01,0xd0,0x00,0x81,0x00,0x20,0x04,0x04,0x00,0x00,
++0x81,0x04,0x08,0x80,0x10,0x00,0xc0,0x00,0x00,0x00,0x20,0x00,0x08,0xc1,0xf0,0x6f,
++0xff,0xff,0xff,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xf3,0xfd,0xff,0xed,0xfc,
++0xff,0xff,0x9f,0xfb,0xfd,0xff,0xff,0xff,0xf1,0xff,0xff,0x7f,0xfb,0x3e,0xff,0x9f,
++0xff,0xff,0xff,0xff,0xfd,0xf9,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0x6f,0xff,
++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xfd,0xbd,0xff,0xef,0x7c,0xeb,0x7f,0xfb,0xdb,0xfa,0xdc,
++0xee,0xf7,0xf6,0xd7,0xf5,0x2d,0xa1,0xbb,0xdd,0xee,0xf7,0x54,0xf7,0xfb,0x2c,0xb5,
++0xb4,0xbd,0x6b,0x6f,0xef,0x6f,0xbb,0xdf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,
++0xfe,0xbf,0xff,0xff,0xff,0xfb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xff,0xbf,0xef,
++0x6f,0xff,0x6f,0xfa,0xdb,0xf1,0xc5,0xbd,0xf5,0x6f,0xff,0x6f,0xca,0xdb,0xff,0xdb,
++0xfb,0xf6,0x97,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x9f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0x7f,0xff,0xff,0xe7,0x63,0xff,0xff,
++0xff,0xfc,0x77,0xdf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff,
++0xc3,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xfc,0xff,0xcf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff,0xc3,
++0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xbf,0xff,0xca,0xff,0x9f,0xff,0xfa,0xb9,0xe7,
++0x9f,0xf3,0x81,0xff,0xff,0xfc,0x73,0xd7,0xff,0xff,0x77,0xff,0xfd,0xff,0xfc,0xff,
++0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,
++0xff,0xf7,0xde,0xff,0xfe,0x7e,0xff,0xbf,0xff,0xbf,0xf1,0xb3,0xff,0xff,0xe3,0xfb,
++0xff,0xe1,0x1f,0x7f,0xff,0xf8,0x78,0xff,0xfb,0x1e,0xff,0xf7,0xfe,0xe7,0xff,0xff,
++0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x04,0x00,
++0x01,0x80,0x40,0x40,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
++0x80,0x00,0x00,0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xff,
++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xf7,0xf1,
++0xfd,0xff,0xff,0xff,0xdf,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
++0xff,0xff,0xff,0xdb,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xdf,0xff,0xff,0x7f,
++0xff,0xff,0xff,0xbe,0xd7,0xff,0xed,0xbd,0x7e,0xbf,0xfe,0xf6,0x7f,0xbf,0x71,0xff,
++0xff,0xda,0xff,0xf9,0xff,0xbf,0x7f,0xfe,0xff,0x6f,0x7f,0xff,0xff,0xff,0xff,0xff,
++0x7f,0xff,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x42,0x00,0x00,0x00,0x00,
++0x80,0xc1,0x00,0x00,0x90,0x00,0xc4,0x00,0x00,0x12,0x20,0x43,0x22,0x81,0x84,0x00,
++0x00,0x14,0x00,0x01,0x00,0x08,0x80,0x00,0x02,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
++0x10,0xc1,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfd,0xff,0xff,0xdd,0xfe,0xff,
++0xb6,0x76,0xe5,0xbc,0xf9,0xf7,0xaf,0x5f,0xbf,0xfc,0xdf,0xcf,0xf1,0xff,0xef,0x79,
++0xff,0xbd,0xff,0xef,0xff,0xff,0xf7,0x6f,0x5f,0xff,0xff,0xfd,0xef,0xef,0xbf,0xff,
++0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xf0,0xff,0xff,0xff,0xff,0xfe,0xdb,0xff,0xff,0xfd,0x2d,0xff,0x69,0x2a,0xef,0x77,
++0xbb,0xdd,0x5a,0xdf,0xf6,0xf6,0xd6,0xf7,0x7d,0xbd,0xd1,0xb2,0x4a,0xd6,0xb2,0xbe,
++0x97,0xf5,0xbd,0xb3,0xad,0xff,0xef,0x7f,0x69,0x6b,0xfb,0xdf,0xff,0xff,0xff,0xf0,
++0x2f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0x9f,0xd4,0xbf,
++0xed,0xaf,0xff,0x6b,0x6f,0xf7,0xff,0xdd,0xdb,0x31,0xfd,0xbf,0xff,0x6f,0x7f,0xff,
++0xff,0xdb,0xff,0xcb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x8f,
++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff,
++0xa5,0xff,0xff,0xff,0xdf,0xb7,0xff,0xff,0xf1,0xff,0xff,0xff,0xf7,0xe9,0x6a,0xbf,
++0xff,0xff,0xfd,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xaf,0xf0,0x4f,0xff,
++0xff,0xff,0xfe,0xfe,0xdf,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff,0xa5,
++0xff,0xff,0xff,0xc0,0x37,0xff,0xff,0xf1,0x99,0x8e,0xdc,0x7f,0xe9,0x6a,0xbf,0xff,
++0xf0,0x0f,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0x07,0xff,0xc0,0xbe,0xff,0xff,0xcf,0xef,0x9f,0xff,
++0xff,0xfb,0xff,0xe7,0xff,0xff,0xa1,0xe3,0xce,0x3c,0x58,0x3f,0xf3,0xff,0xfd,0xef,
++0xf9,0xff,0xff,0xf7,0xf1,0x7f,0xff,0xcb,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,
++0xfe,0xf5,0x7f,0xff,0xf0,0xff,0xfe,0xff,0xc4,0x75,0xe7,0xb9,0xff,0xff,0xff,0xef,
++0xff,0xc7,0x37,0x3b,0xff,0xf0,0x13,0x9e,0x0f,0xf4,0xff,0xfe,0xfb,0xff,0xff,0xf9,
++0xfc,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xef,0xff,0xff,0xff,0xfe,
++0xf3,0xc0,0x01,0x00,0x00,0x02,0x00,0x02,0x22,0x00,0x00,0xc0,0x40,0x00,0x40,0x00,
++0x04,0x08,0x04,0x0a,0x01,0x01,0x10,0x20,0x20,0x00,0x00,0x04,0x08,0x08,0x04,0x00,
++0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x3c,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xfd,
++0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0xcf,0x9d,0xff,
++0xff,0xf7,0xfd,0xf1,0xff,0xff,0xff,0xee,0xbf,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xff,
++0xff,0xff,0xf7,0xf7,0xff,0xff,0xfe,0xbf,0xf7,0xff,0xff,0x5b,0xff,0xbf,0xf7,0xff,
++0xfd,0x7f,0x71,0xfd,0xff,0xed,0xf7,0xfe,0xef,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
++0xff,0xff,0xef,0xff,0x7f,0xff,0xd0,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf8,0x30,0x11,
++0x00,0x48,0x60,0x40,0x82,0x60,0x24,0x60,0x00,0xcc,0x00,0x80,0x04,0x01,0x00,0x00,
++0x14,0x01,0x0c,0x04,0x00,0x30,0x00,0x00,0x00,0x08,0x08,0x00,0x01,0x00,0xc2,0x00,
++0x00,0x02,0x00,0x80,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
++0xf7,0x7b,0xff,0xf3,0xeb,0xbf,0xff,0xf7,0xff,0xff,0xff,0xe7,0x5d,0x3f,0xff,0xf6,
++0xd1,0xfd,0xff,0xeb,0xf7,0x3d,0xff,0xff,0xff,0x5f,0xff,0x7f,0x7f,0xf3,0xff,0xff,
++0xef,0xfd,0xbf,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xb5,0xdf,
++0x6f,0x7d,0x69,0x7f,0xfb,0xdf,0x52,0x5f,0xf6,0xf7,0xfe,0xf6,0xf3,0xbd,0xb1,0xda,
++0xcd,0xfe,0xf6,0xee,0xd2,0xbd,0xa5,0xaf,0xbd,0xff,0x6f,0x7c,0xeb,0x2b,0xfa,0xda,
++0xff,0xfe,0xdf,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,
++0xff,0xf6,0xff,0xbd,0xbf,0xcd,0xbf,0xeb,0x6f,0xf7,0x6f,0xdf,0xdb,0x51,0xfd,0xbd,
++0xff,0x6f,0xff,0x6f,0xfb,0x5b,0xff,0xdb,0xff,0xf6,0xfe,0xf6,0xfd,0xfd,0xbf,0xfe,
++0xf7,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfa,0x50,0xff,0xff,0xff,
++0xf0,0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0xfc,0xff,0xff,
++0xf7,0xdb,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff,
++0xaf,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xa0,0xff,0xff,0xff,0xf0,
++0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,
++0xf3,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff,0xff,
++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0x9f,0xf0,0x7f,
++0xff,0xf9,0xfc,0x4f,0xf3,0xff,0x27,0xeb,0xff,0xfc,0x81,0xfc,0x7f,0xfe,0x7b,0xff,
++0xf7,0xff,0x12,0x7f,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,
++0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xdf,0xfe,0xff,0xfc,0x7e,0x7f,0xbf,
++0xff,0xff,0xaf,0xef,0xff,0xdf,0xdf,0xfb,0xff,0xf1,0xc3,0xfe,0x6f,0xf1,0xcf,0x3f,
++0xfb,0xff,0xff,0xcf,0xfe,0xff,0xff,0xfe,0x7f,0xbf,0xff,0xff,0xbf,0xfa,0xf0,0xdf,
++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
++0x20,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
++0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x02,0x80,0x00,0x02,0x3c,0xf0,0x2f,0xff,
++0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xf1,0xff,0x7f,0xff,0xff,0xff,0xff,0xef,0xff,
++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x2f,0xff,0xff,
++0xff,0xfe,0xf0,0xff,0xff,0xff,0xfb,0xff,0xbf,0xff,0xff,0xff,0xff,0xf7,0xbf,0xfb,
++0xff,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xf7,0xbf,0xfb,0xff,0xff,0xff,0x7f,0xde,0xff,
++0xff,0xff,0xff,0xff,0xff,0xed,0xf7,0xff,0xff,0x7f,0xd0,0xf0,0x3f,0xff,0xff,0xff,
++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x80,
++0x20,0x01,0x01,0x92,0x00,0x01,0x01,0x00,0xe0,0x1c,0x60,0x20,0x30,0x08,0x08,0x00,
++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xc1,0xf0,0x6f,0xff,0xff,0xff,0xfe,
++0xff,0xff,0xff,0xff,0xff,0xdb,0xfe,0xff,0xff,0xdf,0xff,0xfc,0x7f,0xfb,0xbf,0xff,
++0xff,0xff,0xff,0xff,0xf1,0xf6,0xff,0xf7,0x7e,0x3f,0xff,0x7f,0xff,0xff,0xff,0xf7,
++0xff,0xff,0xff,0xed,0xff,0xdf,0xff,0xb7,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,
++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xbf,0xff,0xdf,
++0x57,0xef,0xf1,0xfd,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfb,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
++0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xdf,0xff,
++0xff,0xf1,0xfd,0xff,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xf7,0xfd,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,
++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,
++0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0x6f,0xff,0xfe,0xbf,0xff,0xf1,0xff,
++0xf7,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
++0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x57,0xff,0xfd,0xbf,0xff,0xf1,0xff,0xef,
++0xfe,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,
++0xde,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd,
++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xe7,0x2f,0xf1,0x3c,0xbf,0xfd,
++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff,
++0x02,0x01,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
++0xff,0xff,0xff,0xff,0xff,0xff };
+diff -u --recursive --new-file linux.prev/drivers/net/hamradio/yam.c linux/drivers/net/hamradio/yam.c
+--- linux.prev/drivers/net/hamradio/yam.c Thu Jan 1 00:00:00 1970
++++ linux/drivers/net/hamradio/yam.c Sat Sep 12 22:54:35 1998
+@@ -0,0 +1,1324 @@
++/*****************************************************************************/
++
++/*
++ * yam.c -- YAM radio modem driver.
++ *
++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr)
++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You 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.
++ *
++ * Please note that the GPL allows you to use the driver, NOT the radio.
++ * In order to use the radio, you need a license from the communications
++ * authority of your country.
++ *
++ *
++ * History:
++ * 0.0 F1OAT 06.06.98 Begin of work with baycom.c source code V 0.3
++ * 0.1 F1OAT 07.06.98 Add timer polling routine for channel arbitration
++ * 0.2 F6FBB 08.06.98 Added delay after FPGA programming
++ * 0.3 F6FBB 29.07.98 Delayed PTT implementation for dupmode=2
++ * 0.4 F6FBB 30.07.98 Added TxTail, Slottime and Persistance
++ * 0.5 F6FBB 01.08.98 Shared IRQs, /proc/net and network statistics
++ * 0.6 F6FBB 25.08.98 Added 1200Bds format
++ * 0.7 F6FBB 12.09.98 Added to the kernel configuration
++ */
++
++/*****************************************************************************/
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/net.h>
++#include <linux/in.h>
++#include <linux/if.h>
++#include <linux/malloc.h>
++#include <linux/errno.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++#include <asm/system.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++
++#include <linux/netdevice.h>
++#include <linux/if_arp.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
++/* prototypes for ax25_encapsulate and ax25_rebuild_header */
++#include <net/ax25.h>
++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */
++
++/* make genksyms happy */
++#include <linux/ip.h>
++#include <linux/udp.h>
++#include <linux/tcp.h>
++
++#include <linux/kernel.h>
++#include <linux/proc_fs.h>
++
++#include <linux/yam.h>
++#include "yam9600.h"
++#include "yam1200.h"
++
++/* --------------------------------------------------------------------- */
++
++/*
++ * currently this module is supposed to support both module styles, i.e.
++ * the old one present up to about 2.1.9, and the new one functioning
++ * starting with 2.1.21. The reason is I have a kit allowing to compile
++ * this module also under 2.0.x which was requested by several people.
++ * This will go in 2.2
++ */
++#include <linux/version.h>
++
++#if LINUX_VERSION_CODE >= 0x20100
++#include <asm/uaccess.h>
++#else
++#include <asm/segment.h>
++#include <linux/mm.h>
++
++#undef put_user
++#undef get_user
++
++#define put_user(x,ptr) ({ __put_user((unsigned long)(x),(ptr),sizeof(*(ptr))); 0; })
++#define get_user(x,ptr) ({ x = ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr)))); 0; })
++
++extern inline int copy_from_user(void *to, const void *from, unsigned long n)
++{
++ int i = verify_area(VERIFY_READ, from, n);
++ if (i)
++ return i;
++ memcpy_fromfs(to, from, n);
++ return 0;
++}
++
++extern inline int copy_to_user(void *to, const void *from, unsigned long n)
++{
++ int i = verify_area(VERIFY_WRITE, to, n);
++ if (i)
++ return i;
++ memcpy_tofs(to, from, n);
++ return 0;
++}
++#endif
++
++#if LINUX_VERSION_CODE < 0x20115
++extern __inline__ void dev_init_buffers(struct device *dev)
++{
++ int i;
++ for(i=0;i<DEV_NUMBUFFS;i++)
++ {
++ skb_queue_head_init(&dev->buffs[i]);
++ }
++}
++#endif
++
++#if LINUX_VERSION_CODE >= 0x20123
++#include <linux/init.h>
++#else
++#define __init
++#define __initdata
++#define __initfunc(x) x
++#endif
++
++/* --------------------------------------------------------------------- */
++
++static const char yam_drvname[] = "yam";
++static const char yam_drvinfo[] = KERN_INFO "yam: (C) 1998 Frederic Rible F1OAT\n"
++KERN_INFO "yam: version 0.7 compiled " __TIME__ " " __DATE__ "\n";
++
++/* --------------------------------------------------------------------- */
++
++#define YAM_9600 1
++#define YAM_1200 2
++
++#define NR_PORTS 4
++#define YAM_MAGIC 0xF10A7654
++
++/* Transmitter states */
++
++#define TX_OFF 0
++#define TX_HEAD 1
++#define TX_DATA 2
++#define TX_CRC1 3
++#define TX_CRC2 4
++#define TX_TAIL 5
++
++#define YAM_MAX_FRAME 1024
++
++#define DEFAULT_BITRATE 9600 /* bps */
++#define DEFAULT_HOLDD 10 /* sec */
++#define DEFAULT_TXD 300 /* ms */
++#define DEFAULT_TXTAIL 10 /* ms */
++#define DEFAULT_SLOT 100 /* ms */
++#define DEFAULT_PERS 64 /* 0->255 */
++
++struct yam_port {
++ int magic;
++ int bitrate;
++ int baudrate;
++ int iobase;
++ int irq;
++ int dupmode;
++ char name[16];
++
++ struct device dev;
++
++ /* Stats section */
++
++#if LINUX_VERSION_CODE < 0x20119
++ struct enet_statistics stats;
++#else
++ struct net_device_stats stats;
++#endif
++ int nb_rxint;
++ int nb_mdint;
++
++ /* Parameters section */
++
++ int txd; /* tx delay */
++ int holdd; /* duplex ptt delay */
++ int txtail; /* txtail delay */
++ int slot; /* slottime */
++ int pers; /* persistence */
++
++ /* Tx section */
++
++ int tx_state;
++ int tx_count;
++ int slotcnt;
++ unsigned char tx_buf[YAM_MAX_FRAME];
++ int tx_len;
++ int tx_crcl, tx_crch;
++ struct sk_buff_head send_queue; /* Packets awaiting transmission */
++
++ /* Rx section */
++
++ int dcd;
++ unsigned char rx_buf[YAM_MAX_FRAME];
++ int rx_len;
++ int rx_crcl, rx_crch;
++};
++
++struct yam_mcs {
++ unsigned char bits[YAM_FPGA_SIZE];
++ int bitrate;
++ struct yam_mcs *next;
++};
++
++static struct yam_port yam_ports[NR_PORTS];
++
++static struct yam_mcs *yam_data = NULL;
++
++static unsigned irqs[16];
++
++static char ax25_bcast[7] =
++{'Q' << 1, 'S' << 1, 'T' << 1, ' ' << 1, ' ' << 1, ' ' << 1, '0' << 1};
++static char ax25_test[7] =
++{'L' << 1, 'I' << 1, 'N' << 1, 'U' << 1, 'X' << 1, ' ' << 1, '1' << 1};
++
++static struct timer_list yam_timer;
++
++/* --------------------------------------------------------------------- */
++
++#define RBR(iobase) (iobase+0)
++#define THR(iobase) (iobase+0)
++#define IER(iobase) (iobase+1)
++#define IIR(iobase) (iobase+2)
++#define FCR(iobase) (iobase+2)
++#define LCR(iobase) (iobase+3)
++#define MCR(iobase) (iobase+4)
++#define LSR(iobase) (iobase+5)
++#define MSR(iobase) (iobase+6)
++#define SCR(iobase) (iobase+7)
++#define DLL(iobase) (iobase+0)
++#define DLM(iobase) (iobase+1)
++
++#define YAM_EXTENT 8
++
++/* Interrupt Identification Register Bit Masks */
++#define IIR_NOPEND 1
++#define IIR_MSR 0
++#define IIR_TX 2
++#define IIR_RX 4
++#define IIR_LSR 6
++#define IIR_TIMEOUT 12 /* Fifo mode only */
++
++#define IIR_MASK 0x0F
++
++/* Interrupt Enable Register Bit Masks */
++#define IER_RX 1 /* enable rx interrupt */
++#define IER_TX 2 /* enable tx interrupt */
++#define IER_LSR 4 /* enable line status interrupts */
++#define IER_MSR 8 /* enable modem status interrupts */
++
++/* Modem Control Register Bit Masks */
++#define MCR_DTR 0x01 /* DTR output */
++#define MCR_RTS 0x02 /* RTS output */
++#define MCR_OUT1 0x04 /* OUT1 output (not accessible in RS232) */
++#define MCR_OUT2 0x08 /* Master Interrupt enable (must be set on PCs) */
++#define MCR_LOOP 0x10 /* Loopback enable */
++
++/* Modem Status Register Bit Masks */
++#define MSR_DCTS 0x01 /* Delta CTS input */
++#define MSR_DDSR 0x02 /* Delta DSR */
++#define MSR_DRIN 0x04 /* Delta RI */
++#define MSR_DDCD 0x08 /* Delta DCD */
++#define MSR_CTS 0x10 /* CTS input */
++#define MSR_DSR 0x20 /* DSR input */
++#define MSR_RING 0x40 /* RI input */
++#define MSR_DCD 0x80 /* DCD input */
++
++/* line status register bit mask */
++#define LSR_RXC 0x01
++#define LSR_OE 0x02
++#define LSR_PE 0x04
++#define LSR_FE 0x08
++#define LSR_BREAK 0x10
++#define LSR_THRE 0x20
++#define LSR_TSRE 0x40
++
++/* Line Control Register Bit Masks */
++#define LCR_DLAB 0x80
++#define LCR_BREAK 0x40
++#define LCR_PZERO 0x28
++#define LCR_PEVEN 0x18
++#define LCR_PODD 0x08
++#define LCR_STOP1 0x00
++#define LCR_STOP2 0x04
++#define LCR_BIT5 0x00
++#define LCR_BIT6 0x02
++#define LCR_BIT7 0x01
++#define LCR_BIT8 0x03
++
++/* YAM Modem <-> UART Port mapping */
++
++#define TX_RDY MSR_DCTS /* transmitter ready to send */
++#define RX_DCD MSR_DCD /* carrier detect */
++#define RX_FLAG MSR_RING /* hdlc flag received */
++#define FPGA_DONE MSR_DSR /* FPGA is configured */
++#define PTT_ON (MCR_RTS|MCR_OUT2) /* activate PTT */
++#define PTT_OFF (MCR_DTR|MCR_OUT2) /* release PTT */
++
++#define ENABLE_RXINT IER_RX /* enable uart rx interrupt during rx */
++#define ENABLE_TXINT IER_MSR /* enable uart ms interrupt during tx */
++#define ENABLE_RTXINT (IER_RX|IER_MSR) /* full duplex operations */
++
++#define MIN(a, b) (((a) < (b)) ? (a) : (b))
++#define MAX(a, b) (((a) > (b)) ? (a) : (b))
++
++/*************************************************************************
++* CRC Tables
++************************************************************************/
++
++static const unsigned char chktabl[256]=
++{ 0x00,0x89,0x12,0x9b,0x24,0xad,0x36,0xbf,0x48,0xc1,0x5a,0xd3,0x6c,0xe5,0x7e,
++ 0xf7,0x81,0x08,0x93,0x1a,0xa5,0x2c,0xb7,0x3e,0xc9,0x40,0xdb,0x52,0xed,0x64,
++ 0xff,0x76,0x02,0x8b,0x10,0x99,0x26,0xaf,0x34,0xbd,0x4a,0xc3,0x58,0xd1,0x6e,
++ 0xe7,0x7c,0xf5,0x83,0x0a,0x91,0x18,0xa7,0x2e,0xb5,0x3c,0xcb,0x42,0xd9,0x50,
++ 0xef,0x66,0xfd,0x74,0x04,0x8d,0x16,0x9f,0x20,0xa9,0x32,0xbb,0x4c,0xc5,0x5e,
++ 0xd7,0x68,0xe1,0x7a,0xf3,0x85,0x0c,0x97,0x1e,0xa1,0x28,0xb3,0x3a,0xcd,0x44,
++ 0xdf,0x56,0xe9,0x60,0xfb,0x72,0x06,0x8f,0x14,0x9d,0x22,0xab,0x30,0xb9,0x4e,
++ 0xc7,0x5c,0xd5,0x6a,0xe3,0x78,0xf1,0x87,0x0e,0x95,0x1c,0xa3,0x2a,0xb1,0x38,
++ 0xcf,0x46,0xdd,0x54,0xeb,0x62,0xf9,0x70,0x08,0x81,0x1a,0x93,0x2c,0xa5,0x3e,
++ 0xb7,0x40,0xc9,0x52,0xdb,0x64,0xed,0x76,0xff,0x89,0x00,0x9b,0x12,0xad,0x24,
++ 0xbf,0x36,0xc1,0x48,0xd3,0x5a,0xe5,0x6c,0xf7,0x7e,0x0a,0x83,0x18,0x91,0x2e,
++ 0xa7,0x3c,0xb5,0x42,0xcb,0x50,0xd9,0x66,0xef,0x74,0xfd,0x8b,0x02,0x99,0x10,
++ 0xaf,0x26,0xbd,0x34,0xc3,0x4a,0xd1,0x58,0xe7,0x6e,0xf5,0x7c,0x0c,0x85,0x1e,
++ 0x97,0x28,0xa1,0x3a,0xb3,0x44,0xcd,0x56,0xdf,0x60,0xe9,0x72,0xfb,0x8d,0x04,
++ 0x9f,0x16,0xa9,0x20,0xbb,0x32,0xc5,0x4c,0xd7,0x5e,0xe1,0x68,0xf3,0x7a,0x0e,
++ 0x87,0x1c,0x95,0x2a,0xa3,0x38,0xb1,0x46,0xcf,0x54,0xdd,0x62,0xeb,0x70,0xf9,
++ 0x8f,0x06,0x9d,0x14,0xab,0x22,0xb9,0x30,0xc7,0x4e,0xd5,0x5c,0xe3,0x6a,0xf1,
++ 0x78};
++static const unsigned char chktabh[256]=
++{ 0x00,0x11,0x23,0x32,0x46,0x57,0x65,0x74,0x8c,0x9d,0xaf,0xbe,0xca,0xdb,0xe9,
++ 0xf8,0x10,0x01,0x33,0x22,0x56,0x47,0x75,0x64,0x9c,0x8d,0xbf,0xae,0xda,0xcb,
++ 0xf9,0xe8,0x21,0x30,0x02,0x13,0x67,0x76,0x44,0x55,0xad,0xbc,0x8e,0x9f,0xeb,
++ 0xfa,0xc8,0xd9,0x31,0x20,0x12,0x03,0x77,0x66,0x54,0x45,0xbd,0xac,0x9e,0x8f,
++ 0xfb,0xea,0xd8,0xc9,0x42,0x53,0x61,0x70,0x04,0x15,0x27,0x36,0xce,0xdf,0xed,
++ 0xfc,0x88,0x99,0xab,0xba,0x52,0x43,0x71,0x60,0x14,0x05,0x37,0x26,0xde,0xcf,
++ 0xfd,0xec,0x98,0x89,0xbb,0xaa,0x63,0x72,0x40,0x51,0x25,0x34,0x06,0x17,0xef,
++ 0xfe,0xcc,0xdd,0xa9,0xb8,0x8a,0x9b,0x73,0x62,0x50,0x41,0x35,0x24,0x16,0x07,
++ 0xff,0xee,0xdc,0xcd,0xb9,0xa8,0x9a,0x8b,0x84,0x95,0xa7,0xb6,0xc2,0xd3,0xe1,
++ 0xf0,0x08,0x19,0x2b,0x3a,0x4e,0x5f,0x6d,0x7c,0x94,0x85,0xb7,0xa6,0xd2,0xc3,
++ 0xf1,0xe0,0x18,0x09,0x3b,0x2a,0x5e,0x4f,0x7d,0x6c,0xa5,0xb4,0x86,0x97,0xe3,
++ 0xf2,0xc0,0xd1,0x29,0x38,0x0a,0x1b,0x6f,0x7e,0x4c,0x5d,0xb5,0xa4,0x96,0x87,
++ 0xf3,0xe2,0xd0,0xc1,0x39,0x28,0x1a,0x0b,0x7f,0x6e,0x5c,0x4d,0xc6,0xd7,0xe5,
++ 0xf4,0x80,0x91,0xa3,0xb2,0x4a,0x5b,0x69,0x78,0x0c,0x1d,0x2f,0x3e,0xd6,0xc7,
++ 0xf5,0xe4,0x90,0x81,0xb3,0xa2,0x5a,0x4b,0x79,0x68,0x1c,0x0d,0x3f,0x2e,0xe7,
++ 0xf6,0xc4,0xd5,0xa1,0xb0,0x82,0x93,0x6b,0x7a,0x48,0x59,0x2d,0x3c,0x0e,0x1f,
++ 0xf7,0xe6,0xd4,0xc5,0xb1,0xa0,0x92,0x83,0x7b,0x6a,0x58,0x49,0x3d,0x2c,0x1e,
++ 0x0f};
++
++/*************************************************************************
++* FPGA functions
++************************************************************************/
++
++static void delay(int ms)
++{
++ unsigned long timeout = jiffies + ((ms*HZ)/1000);
++ while (jiffies < timeout);
++}
++
++/*
++ * reset FPGA
++ */
++
++static void fpga_reset(int iobase)
++{
++ outb(0, IER(iobase));
++ outb(LCR_DLAB|LCR_BIT5, LCR(iobase));
++ outb(1, DLL(iobase));
++ outb(0, DLM(iobase));
++
++ outb(LCR_BIT5, LCR(iobase));
++ inb(LSR(iobase));
++ inb(MSR(iobase));
++ /* turn off FPGA supply voltage */
++ outb(MCR_OUT1|MCR_OUT2, MCR(iobase));
++ delay(100);
++ /* turn on FPGA supply voltage again */
++ outb(MCR_DTR|MCR_RTS|MCR_OUT1|MCR_OUT2, MCR(iobase));
++ delay(100);
++}
++
++/*
++ * send one byte to FPGA
++ */
++
++static int fpga_write(int iobase, unsigned char wrd)
++{
++ unsigned char bit;
++ int k;
++ unsigned long timeout = jiffies + HZ/10;
++
++ for (k=0; k<8; k++) {
++ bit = (wrd&0x80)?(MCR_RTS|MCR_DTR):MCR_DTR;
++ outb(bit|MCR_OUT1|MCR_OUT2, MCR(iobase));
++ wrd <<=1 ;
++ outb(0xfc, THR(iobase));
++ while ((inb(LSR(iobase)) & LSR_TSRE) == 0)
++ if (jiffies > timeout) return -1;
++ }
++
++ return 0;
++}
++
++#ifdef MODULE
++static void free_mcs(void)
++{
++ struct yam_mcs *p;
++
++ while (yam_data) {
++ p = yam_data;
++ yam_data = yam_data->next;
++ kfree(p);
++ }
++}
++#endif
++
++static unsigned char *add_mcs(unsigned char *bits, int bitrate)
++{
++ struct yam_mcs *p;
++
++ /* If it already exists, replace the bit data */
++ p = yam_data;
++ while (p) {
++ if (p->bitrate == bitrate) {
++ memcpy(p->bits, bits, YAM_FPGA_SIZE);
++ return p->bits;
++ }
++ p = p->next;
++ }
++
++ /* Allocate a new mcs */
++ p = kmalloc(sizeof(struct yam_mcs), GFP_ATOMIC);
++ if (p == NULL) {
++ printk(KERN_WARNING "YAM: no memory to allocate mcs\n");
++ return NULL;
++ }
++
++ memcpy(p->bits, bits, YAM_FPGA_SIZE);
++ p->bitrate = bitrate;
++ p->next = yam_data;
++ yam_data = p;
++
++ return p->bits;
++}
++
++static unsigned char *get_mcs(int bitrate)
++{
++ struct yam_mcs *p;
++
++ p = yam_data;
++ while (p) {
++ if (p->bitrate == bitrate)
++ return p->bits;
++ p = p->next;
++ }
++
++ /* Load predefined mcs data */
++ switch (bitrate) {
++ case 1200 :
++ return add_mcs(bits_1200, bitrate);
++ default :
++ return add_mcs(bits_9600, bitrate);
++ }
++}
++
++/*
++ * download bitstream to FPGA
++ * data is contained in bits[] array in fpgaconf.h
++ */
++
++static int fpga_download(int iobase, int bitrate)
++{
++ int i, rc;
++ unsigned char *pbits;
++
++ pbits = get_mcs(bitrate);
++ if (pbits == NULL)
++ return -1;
++
++ fpga_reset(iobase);
++ for(i = 0 ; i < YAM_FPGA_SIZE ; i++) {
++ if (fpga_write(iobase, pbits[i])) {
++ printk("yam: error in write cycle\n");
++ return -1; /* write... */
++ }
++ }
++
++ fpga_write(iobase, 0xFF);
++ rc = inb(MSR(iobase)); /* check DONE signal */
++
++ /* Necesary for some hardwares */
++ delay(50);
++
++ return (rc & MSR_DSR) ? 0 : -1;
++}
++
++
++/************************************************************************
++* Serial port init
++************************************************************************/
++
++static void yam_set_uart(struct device *dev)
++{
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++ int divisor = 115200/yp->baudrate;
++
++ outb(0, IER(dev->base_addr));
++ outb(LCR_DLAB|LCR_BIT8, LCR(dev->base_addr));
++ outb(divisor, DLL(dev->base_addr));
++ outb(0, DLM(dev->base_addr));
++ outb(LCR_BIT8, LCR(dev->base_addr));
++ outb(PTT_OFF, MCR(dev->base_addr));
++ outb(0x00, FCR(dev->base_addr));
++
++ /* Flush pending irq */
++
++ inb(RBR(dev->base_addr));
++ inb(MSR(dev->base_addr));
++
++ /* Enable rx irq */
++
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ /* if (yp->dupmode) {
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ }
++ else {
++ outb(ENABLE_RXINT, IER(dev->base_addr));
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ } */
++}
++
++
++/* --------------------------------------------------------------------- */
++
++enum uart { c_uart_unknown, c_uart_8250,
++ c_uart_16450, c_uart_16550, c_uart_16550A};
++static const char *uart_str[] =
++ { "unknown", "8250", "16450", "16550", "16550A" };
++
++static enum uart yam_check_uart(unsigned int iobase)
++{
++ unsigned char b1,b2,b3;
++ enum uart u;
++ enum uart uart_tab[] =
++ { c_uart_16450, c_uart_unknown, c_uart_16550, c_uart_16550A };
++
++ b1 = inb(MCR(iobase));
++ outb(b1 | 0x10, MCR(iobase)); /* loopback mode */
++ b2 = inb(MSR(iobase));
++ outb(0x1a, MCR(iobase));
++ b3 = inb(MSR(iobase)) & 0xf0;
++ outb(b1, MCR(iobase)); /* restore old values */
++ outb(b2, MSR(iobase));
++ if (b3 != 0x90)
++ return c_uart_unknown;
++ inb(RBR(iobase));
++ inb(RBR(iobase));
++ outb(0x01, FCR(iobase)); /* enable FIFOs */
++ u = uart_tab[(inb(IIR(iobase)) >> 6) & 3];
++ if (u == c_uart_16450) {
++ outb(0x5a, SCR(iobase));
++ b1 = inb(SCR(iobase));
++ outb(0xa5, SCR(iobase));
++ b2 = inb(SCR(iobase));
++ if ((b1 != 0x5a) || (b2 != 0xa5))
++ u = c_uart_8250;
++ }
++ return u;
++}
++
++/******************************************************************************
++* Rx Section
++******************************************************************************/
++static void inline yam_rx_flag(struct device *dev, struct yam_port *yp)
++{
++ if (yp->dcd && yp->rx_len >= 3 && yp->rx_len < YAM_MAX_FRAME) {
++ int pkt_len = yp->rx_len - 2 + 1; /* -CRC + kiss */
++ struct sk_buff *skb;
++
++ if ((yp->rx_crch & yp->rx_crcl) != 0xFF) {
++ /* Bad crc */
++ }
++ else {
++ if (!(skb = dev_alloc_skb(pkt_len))) {
++ printk("%s: memory squeeze, dropping packet\n", dev->name);
++ ++yp->stats.rx_dropped;
++ }
++ else {
++ unsigned char *cp;
++ skb->dev = dev;
++ cp = skb_put(skb, pkt_len);
++ *cp++ = 0; /* KISS kludge */
++ memcpy(cp, yp->rx_buf, pkt_len - 1);
++ skb->protocol = htons(ETH_P_AX25);
++ skb->mac.raw = skb->data;
++ netif_rx(skb);
++ ++yp->stats.rx_packets;
++ }
++ }
++ }
++ yp->rx_len = 0;
++ yp->rx_crcl = 0x21;
++ yp->rx_crch = 0xf3;
++}
++
++static void inline yam_rx_byte(struct device *dev, struct yam_port *yp, unsigned char rxb)
++{
++ if (yp->rx_len < YAM_MAX_FRAME) {
++ unsigned char c = yp->rx_crcl;
++ yp->rx_crcl = (chktabl[c]^yp->rx_crch);
++ yp->rx_crch = (chktabh[c]^rxb);
++ yp->rx_buf[yp->rx_len++] = rxb;
++ }
++}
++
++/********************************************************************************
++* TX Section
++********************************************************************************/
++
++static void ptt_on(struct device *dev)
++{
++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */
++
++ outb(PTT_ON, MCR(dev->base_addr));
++ /* inb(MSR(dev->base_addr));
++ if (yp->dupmode) {
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ }
++ else {
++ outb(ENABLE_TXINT, IER(dev->base_addr));
++ } */
++}
++
++static void ptt_off(struct device *dev)
++{
++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */
++
++ outb(PTT_OFF, MCR(dev->base_addr));
++ /* if (yp->dupmode) {
++ outb(ENABLE_RTXINT, IER(dev->base_addr));
++ }
++ else {
++ inb(RBR(dev->base_addr));
++ outb(ENABLE_RXINT, IER(dev->base_addr));
++ } */
++}
++
++static int yam_send_packet(struct sk_buff *skb, struct device *dev)
++{
++ struct yam_port *yp = dev->priv;
++
++ if (skb == NULL) {
++ /* dev_tint(dev); */
++ return 0;
++ }
++ skb_queue_tail(&yp->send_queue, skb);
++ dev->trans_start = jiffies;
++ return 0;
++}
++
++static void yam_start_tx(struct device *dev, struct yam_port *yp)
++{
++ if ((yp->tx_state == TX_TAIL) || (yp->txd == 0))
++ yp->tx_count = 1;
++ else
++ yp->tx_count = (yp->bitrate*yp->txd)/8000;
++ yp->tx_state = TX_HEAD;
++ ptt_on(dev);
++}
++
++static unsigned short random_seed;
++
++static inline unsigned short random_num(void)
++{
++ random_seed = 28629 * random_seed + 157;
++ return random_seed;
++}
++
++static void yam_arbitrate(struct device *dev)
++{
++ struct yam_port *yp = dev->priv;
++
++ if (!yp || yp->magic != YAM_MAGIC
++ || yp->tx_state!=TX_OFF || skb_queue_empty(&yp->send_queue)) {
++ return;
++ }
++
++ /* tx_state is TX_OFF and there is data to send */
++
++ if (yp->dupmode) {
++ /* Full duplex mode, don't wait */
++ yam_start_tx(dev, yp);
++ return;
++ }
++
++ if (yp->dcd) {
++ /* DCD on, wait slotime ... */
++ yp->slotcnt = yp->slot / 10;
++ return;
++ }
++
++ /* Is slottime passed ? */
++ if ((--yp->slotcnt) > 0)
++ return;
++
++ yp->slotcnt = yp->slot / 10;
++
++ /* is random > persist ? */
++ if ((random_num() % 256) > yp->pers)
++ return;
++
++ yam_start_tx(dev, yp);
++}
++
++static void yam_dotimer(unsigned long dummy)
++{
++ int i;
++
++ for (i = 0; i < NR_PORTS; i++) {
++ struct device *dev = &yam_ports[i].dev;
++ if (dev->start) yam_arbitrate(dev);
++ }
++ yam_timer.expires = jiffies + HZ/100;
++ add_timer(&yam_timer);
++}
++
++static void yam_tx_byte(struct device *dev, struct yam_port *yp)
++{
++ struct sk_buff *skb;
++ unsigned char b, temp;
++
++ switch (yp->tx_state) {
++ case TX_OFF:
++ break;
++ case TX_HEAD:
++ if (--yp->tx_count <= 0) {
++ if (!(skb = skb_dequeue(&yp->send_queue))) {
++ ptt_off(dev);
++ yp->tx_state = TX_OFF;
++ break;
++ }
++ yp->tx_state = TX_DATA;
++ if (skb->data[0] != 0) {
++/* do_kiss_params(s, skb->data, skb->len);*/
++ dev_kfree_skb(skb);
++ break;
++ }
++ yp->tx_len = skb->len-1; /* strip KISS byte */
++ if (yp->tx_len >= YAM_MAX_FRAME || yp->tx_len < 2) {
++ dev_kfree_skb(skb);
++ break;
++ }
++ memcpy(yp->tx_buf, skb->data+1, yp->tx_len);
++ dev_kfree_skb(skb);
++ yp->tx_count = 0;
++ yp->tx_crcl = 0x21;
++ yp->tx_crch = 0xf3;
++ yp->tx_state = TX_DATA;
++ }
++ break;
++ case TX_DATA:
++ b = yp->tx_buf[yp->tx_count++];
++ outb(b, THR(dev->base_addr));
++ temp = yp->tx_crcl;
++ yp->tx_crcl = chktabl[temp]^yp->tx_crch;
++ yp->tx_crch = chktabh[temp]^b;
++ if (yp->tx_count >= yp->tx_len) {
++ yp->tx_state = TX_CRC1;
++ }
++ break;
++ case TX_CRC1:
++ yp->tx_crch = chktabl[yp->tx_crcl]^yp->tx_crch;
++ yp->tx_crcl = chktabh[yp->tx_crcl]^chktabl[yp->tx_crch]^0xff;
++ outb(yp->tx_crcl, THR(dev->base_addr));
++ yp->tx_state = TX_CRC2;
++ break;
++ case TX_CRC2:
++ outb(chktabh[yp->tx_crch]^0xFF, THR(dev->base_addr));
++ if (skb_queue_empty(&yp->send_queue)) {
++ yp->tx_count = (yp->bitrate*yp->txtail)/8000;
++ if (yp->dupmode == 2) yp->tx_count += (yp->bitrate*yp->holdd)/8;
++ if (yp->tx_count == 0) yp->tx_count = 1;
++ yp->tx_state = TX_TAIL;
++ }
++ else {
++ yp->tx_count = 1;
++ yp->tx_state = TX_HEAD;
++ }
++ ++yp->stats.tx_packets;
++ break;
++ case TX_TAIL:
++ if (--yp->tx_count <= 0) {
++ yp->tx_state = TX_OFF;
++ ptt_off(dev);
++ }
++ break;
++ }
++}
++
++/***********************************************************************************
++* ISR routine
++************************************************************************************/
++
++static void yam_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct device *dev;
++ struct yam_port *yp;
++ unsigned char iir;
++ int counter = 100;
++ int i;
++
++ sti();
++
++ for (i = 0 ; i < NR_PORTS ; i++) {
++ yp = &yam_ports[i];
++ dev = &yp->dev;
++
++ if (!dev->start)
++ continue;
++
++ while ( (iir = IIR_MASK & inb(IIR(dev->base_addr)) ) != IIR_NOPEND) {
++ unsigned char msr = inb(MSR(dev->base_addr));
++ unsigned char lsr = inb(LSR(dev->base_addr));
++ unsigned char rxb;
++
++ if (lsr & LSR_OE)
++ ++yp->stats.rx_fifo_errors;
++
++ yp->dcd = (msr & RX_DCD) ? 1 : 0;
++
++ if (--counter <= 0) {
++ printk("%s: too many irq iir=%d\n", dev->name, iir);
++ return;
++ }
++
++ if (msr & TX_RDY) {
++ ++yp->nb_mdint;
++ yam_tx_byte(dev, yp);
++ }
++
++ if (lsr & LSR_RXC) {
++ ++yp->nb_rxint;
++ rxb = inb(RBR(dev->base_addr));
++ if (msr & RX_FLAG) yam_rx_flag(dev, yp);
++ else yam_rx_byte(dev, yp, rxb);
++ }
++ /*
++ switch (iir) {
++ case IIR_MSR:
++ ++yp->nb_mdint;
++ if (msr & TX_RDY) yam_tx_byte(dev, yp);
++ break;
++ case IIR_RX:
++ ++yp->nb_rxint;
++ rxb = inb(RBR(dev->base_addr));
++ if (msr & RX_FLAG) yam_rx_flag(dev, yp);
++ else yam_rx_byte(dev, yp, rxb);
++ break;
++ }
++ */
++ }
++ }
++}
++
++static int yam_net_get_info(char *buffer, char **start, off_t offset, int length, int dummy)
++{
++ int len = 0;
++ int i;
++ off_t pos = 0;
++ off_t begin = 0;
++
++ cli();
++
++ for (i = 0; i < NR_PORTS; i++)
++ {
++ if (yam_ports[i].iobase == 0 || yam_ports[i].irq == 0)
++ continue;
++ len += sprintf(buffer+len, "Device %s\n", yam_ports[i].name);
++ len += sprintf(buffer+len, " Up %d\n", yam_ports[i].dev.start);
++ len += sprintf(buffer+len, " Speed %u\n", yam_ports[i].bitrate);
++ len += sprintf(buffer+len, " IoBase 0x%x\n", yam_ports[i].iobase);
++ len += sprintf(buffer+len, " BaudRate %u\n", yam_ports[i].baudrate);
++ len += sprintf(buffer+len, " IRQ %u\n", yam_ports[i].irq);
++ len += sprintf(buffer+len, " TxState %u\n", yam_ports[i].tx_state);
++ len += sprintf(buffer+len, " Duplex %u\n", yam_ports[i].dupmode);
++ len += sprintf(buffer+len, " HoldDly %u\n", yam_ports[i].holdd);
++ len += sprintf(buffer+len, " TxDelay %u\n", yam_ports[i].txd);
++ len += sprintf(buffer+len, " TxTail %u\n", yam_ports[i].txtail);
++ len += sprintf(buffer+len, " SlotTime %u\n", yam_ports[i].slot);
++ len += sprintf(buffer+len, " Persist %u\n", yam_ports[i].pers);
++ len += sprintf(buffer+len, " TxFrames %lu\n", yam_ports[i].stats.tx_packets);
++ len += sprintf(buffer+len, " RxFrames %lu\n", yam_ports[i].stats.rx_packets);
++ len += sprintf(buffer+len, " TxInt %u\n", yam_ports[i].nb_mdint);
++ len += sprintf(buffer+len, " RxInt %u\n", yam_ports[i].nb_rxint);
++ len += sprintf(buffer+len, " RxOver %lu\n", yam_ports[i].stats.rx_fifo_errors);
++ len += sprintf(buffer+len, "\n");
++
++ pos = begin + len;
++
++ if (pos < offset) {
++ len = 0;
++ begin = pos;
++ }
++
++ if (pos > offset + length)
++ break;
++ }
++
++ sti();
++
++ *start = buffer + (offset - begin);
++ len -= (offset - begin);
++
++ if (len > length) len = length;
++
++ return len;
++}
++
++#ifdef CONFIG_INET
++#ifndef PROC_NET_YAM
++#define PROC_NET_YAM (PROC_NET_LAST+10) /* Sorry again... */
++#endif
++
++struct proc_dir_entry yam_proc_dir_entry =
++{
++ PROC_NET_YAM, 3, "yam", S_IFREG | S_IRUGO, 1, 0, 0, 0,
++ &proc_net_inode_operations, yam_net_get_info
++};
++
++#define yam_net_procfs_init() proc_net_register(&yam_proc_dir_entry);
++#define yam_net_procfs_remove() proc_net_unregister(PROC_NET_YAM);
++#else
++#define yam_net_procfs_init()
++#define yam_net_procfs_remove()
++#endif
++
++/* --------------------------------------------------------------------- */
++
++#if LINUX_VERSION_CODE >= 0x20119
++static struct net_device_stats *yam_get_stats(struct device *dev)
++#else
++static struct enet_statistics *yam_get_stats(struct device *dev)
++#endif
++{
++ struct yam_port *yp;
++
++ if (!dev || !dev->priv)
++ return NULL;
++
++ yp = (struct yam_port *)dev->priv;
++ if (yp->magic != YAM_MAGIC)
++ return NULL;
++
++ /*
++ * Get the current statistics. This may be called with the
++ * card open or closed.
++ */
++ return &yp->stats;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_open(struct device *dev)
++{
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++ enum uart u;
++ int i;
++
++ printk(KERN_INFO "Trying %s at iobase 0x%lx irq %u\n", dev->name, dev->base_addr, dev->irq);
++
++ if (!dev || !yp || !yp->bitrate)
++ return -ENXIO;
++ if (!dev->base_addr || dev->base_addr > 0x1000-YAM_EXTENT ||
++ dev->irq < 2 || dev->irq > 15) {
++ return -ENXIO;
++ }
++ if (check_region(dev->base_addr, YAM_EXTENT)) {
++ printk("%s: cannot 0x%lx busy\n", dev->name, dev->base_addr);
++ return -EACCES;
++ }
++ if ((u = yam_check_uart(dev->base_addr)) == c_uart_unknown) {
++ printk("%s: cannot find uart type\n", dev->name);
++ return -EIO;
++ }
++
++ if (fpga_download(dev->base_addr, yp->bitrate)) {
++ printk("%s: cannot init FPGA\n", dev->name);
++ return -EIO;
++ }
++
++ outb(0, IER(dev->base_addr));
++ if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT|SA_SHIRQ, dev->name, NULL)) {
++ printk("%s: irq %d busy\n", dev->name, dev->irq);
++ return -EBUSY;
++ }
++
++ request_region(dev->base_addr, YAM_EXTENT, dev->name);
++
++ yam_set_uart(dev);
++ dev->start = 1;
++ yp->slotcnt = yp->slot / 10;
++
++ /* Reset overruns for all ports - FPGA programming makes overruns */
++ for (i = 0 ; i < NR_PORTS ; i++) {
++ inb(LSR(yam_ports[i].dev.base_addr));
++ yam_ports[i].stats.rx_fifo_errors = 0;
++ }
++
++ printk(KERN_INFO "%s at iobase 0x%lx irq %u uart %s\n", dev->name, dev->base_addr, dev->irq,
++ uart_str[u]);
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_close(struct device *dev)
++{
++ struct sk_buff *skb;
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++
++ if (!dev || !yp)
++ return -EINVAL;
++ /*
++ * disable interrupts
++ */
++ outb(0, IER(dev->base_addr));
++ outb(1, MCR(dev->base_addr));
++ /* Remove IRQ handler if last */
++ free_irq(dev->irq, NULL);
++ release_region(dev->base_addr, YAM_EXTENT);
++ dev->start = 0;
++ dev->tbusy = 1;
++ while ((skb = skb_dequeue(&yp->send_queue)))
++ dev_kfree_skb(skb);
++
++ printk(KERN_INFO "%s: close yam at iobase 0x%lx irq %u\n",
++ yam_drvname, dev->base_addr, dev->irq);
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_ioctl(struct device *dev, struct ifreq *ifr, int cmd)
++{
++ struct yam_port *yp = (struct yam_port *)dev->priv;
++ struct yamdrv_ioctl_cfg yi;
++ struct yamdrv_ioctl_mcs *ym;
++ int ioctl_cmd;
++
++ if (copy_from_user(&ioctl_cmd, ifr->ifr_data, sizeof(int)))
++ return -EFAULT;
++
++ if (yp == NULL || yp->magic != YAM_MAGIC)
++ return -EINVAL;
++
++ if (!suser()) return -EPERM;
++
++ if (cmd != SIOCDEVPRIVATE)
++ return -EINVAL;
++
++ switch(ioctl_cmd) {
++
++ case SIOCYAMRESERVED:
++ return -EINVAL; /* unused */
++
++ case SIOCYAMSMCS:
++ if (dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_ATOMIC);
++ ym->bitrate = 9600;
++ if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs)))
++ return -EFAULT;
++ if (ym->bitrate > YAM_MAXBITRATE) return -EINVAL;
++ add_mcs(ym->bits, ym->bitrate);
++ kfree(ym);
++ break;
++
++ case SIOCYAMSCFG:
++ if (copy_from_user(&yi, ifr->ifr_data, sizeof(struct yamdrv_ioctl_cfg)))
++ return -EFAULT;
++
++ if ((yi.cfg.mask & YAM_IOBASE) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ if ((yi.cfg.mask & YAM_IRQ) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ if ((yi.cfg.mask & YAM_BITRATE) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++ if ((yi.cfg.mask & YAM_BAUDRATE) && dev->start)
++ return -EINVAL; /* Cannot change this parameter when up */
++
++ if (yi.cfg.mask & YAM_IOBASE) {
++ yp->iobase = yi.cfg.iobase;
++ dev->base_addr = yi.cfg.iobase;
++ }
++ if (yi.cfg.mask & YAM_IRQ) {
++ if (yi.cfg.irq > 15) return -EINVAL;
++ yp->irq = yi.cfg.irq;
++ dev->irq = yi.cfg.irq;
++ }
++ if (yi.cfg.mask & YAM_BITRATE) {
++ if (yi.cfg.bitrate > YAM_MAXBITRATE) return -EINVAL;
++ yp->bitrate = yi.cfg.bitrate;
++ }
++ if (yi.cfg.mask & YAM_BAUDRATE) {
++ if (yi.cfg.baudrate > YAM_MAXBAUDRATE) return -EINVAL;
++ yp->baudrate = yi.cfg.baudrate;
++ }
++ if (yi.cfg.mask & YAM_MODE) {
++ if (yi.cfg.mode > YAM_MAXMODE) return -EINVAL;
++ yp->dupmode = yi.cfg.mode;
++ }
++ if (yi.cfg.mask & YAM_HOLDDLY) {
++ if (yi.cfg.holddly > YAM_MAXHOLDDLY) return -EINVAL;
++ yp->holdd = yi.cfg.holddly;
++ }
++ if (yi.cfg.mask & YAM_TXDELAY) {
++ if (yi.cfg.txdelay > YAM_MAXTXDELAY) return -EINVAL;
++ yp->txd = yi.cfg.txdelay;
++ }
++ if (yi.cfg.mask & YAM_TXTAIL) {
++ if (yi.cfg.txtail > YAM_MAXTXTAIL) return -EINVAL;
++ yp->txtail = yi.cfg.txtail;
++ }
++ if (yi.cfg.mask & YAM_PERSIST) {
++ if (yi.cfg.persist > YAM_MAXPERSIST) return -EINVAL;
++ yp->pers = yi.cfg.persist;
++ }
++ if (yi.cfg.mask & YAM_SLOTTIME) {
++ if (yi.cfg.slottime > YAM_MAXSLOTTIME) return -EINVAL;
++ yp->slot = yi.cfg.slottime;
++ yp->slotcnt = yp->slot / 10;
++ }
++ break;
++
++ case SIOCYAMGCFG:
++ yi.cfg.mask = 0xffffffff;
++ yi.cfg.iobase = yp->iobase;
++ yi.cfg.irq = yp->irq;
++ yi.cfg.bitrate = yp->bitrate;
++ yi.cfg.baudrate = yp->baudrate;
++ yi.cfg.mode = yp->dupmode;
++ yi.cfg.txdelay = yp->txd;
++ yi.cfg.holddly = yp->holdd;
++ yi.cfg.txtail = yp->txtail;
++ yi.cfg.persist = yp->pers;
++ yi.cfg.slottime = yp->slot;
++ if (copy_to_user(ifr->ifr_data, &yi, sizeof(struct yamdrv_ioctl_cfg)))
++ return -EFAULT;
++ break;
++
++ default:
++ return -EINVAL;
++
++ }
++
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_set_mac_address(struct device *dev, void *addr)
++{
++ struct sockaddr *sa = (struct sockaddr *)addr;
++
++ /* addr is an AX.25 shifted ASCII mac address */
++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len);
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++static int yam_probe(struct device *dev)
++{
++ struct yam_port *yp;
++
++ if (!dev)
++ return -ENXIO;
++
++ yp = (struct yam_port *)dev->priv;
++
++ dev->open = yam_open;
++ dev->stop = yam_close;
++ dev->do_ioctl = yam_ioctl;
++ dev->hard_start_xmit = yam_send_packet;
++ dev->get_stats = yam_get_stats;
++
++ dev_init_buffers(dev);
++ skb_queue_head_init(&yp->send_queue);
++
++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
++ dev->hard_header = ax25_encapsulate;
++ dev->rebuild_header = ax25_rebuild_header;
++#else /* CONFIG_AX25 || CONFIG_AX25_MODULE */
++ dev->hard_header = NULL;
++ dev->rebuild_header = NULL;
++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */
++
++ dev->set_mac_address = yam_set_mac_address;
++
++ dev->type = ARPHRD_AX25; /* AF_AX25 device */
++ dev->hard_header_len = 73; /* We do digipeaters now */
++ dev->mtu = 256; /* AX25 is the default */
++ dev->addr_len = 7; /* sizeof an ax.25 address */
++ memcpy(dev->broadcast, ax25_bcast, 7);
++ memcpy(dev->dev_addr, ax25_test, 7);
++
++ /* New style flags */
++ dev->flags = 0;
++
++ return 0;
++}
++
++/* --------------------------------------------------------------------- */
++
++__initfunc(int yam_init(struct device *dev))
++{
++ int i;
++
++ printk(yam_drvinfo);
++
++ /* Clears the IRQ table */
++ memset(irqs, 0, sizeof(irqs));
++ memset(yam_ports, 0, sizeof(yam_ports));
++
++ for(i = 0; i < NR_PORTS; i++) {
++ sprintf(yam_ports[i].name, "yam%d", i);
++ yam_ports[i].magic = YAM_MAGIC;
++ yam_ports[i].bitrate = DEFAULT_BITRATE;
++ yam_ports[i].baudrate = DEFAULT_BITRATE * 2;
++ yam_ports[i].iobase = 0;
++ yam_ports[i].irq = 0;
++ yam_ports[i].dupmode = 0;
++ yam_ports[i].holdd = DEFAULT_HOLDD;
++ yam_ports[i].txd = DEFAULT_TXD;
++ yam_ports[i].txtail = DEFAULT_TXTAIL;
++ yam_ports[i].slot = DEFAULT_SLOT;
++ yam_ports[i].pers = DEFAULT_PERS;
++
++ dev = &yam_ports[i].dev;
++
++ dev->priv = &yam_ports[i];
++ dev->name = yam_ports[i].name;
++ dev->base_addr = yam_ports[i].iobase;
++ dev->irq = yam_ports[i].irq;
++ dev->init = yam_probe;
++ dev->if_port = 0;
++ dev->start = 0;
++ dev->tbusy = 1;
++
++ if (register_netdev(dev)) {
++ printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name);
++ return -ENXIO;
++ }
++ }
++
++ yam_timer.function = yam_dotimer;
++ yam_timer.expires = jiffies + HZ/100;
++ add_timer(&yam_timer);
++
++ yam_net_procfs_init();
++
++ /* do not keep this device */
++ return 1;
++}
++
++/* --------------------------------------------------------------------- */
++
++#ifdef MODULE
++
++/*
++ * command line settable parameters
++ */
++
++#if LINUX_VERSION_CODE >= 0x20115
++
++MODULE_AUTHOR("Frederic Rible F1OAT frible@teaser.fr");
++MODULE_DESCRIPTION("Yam amateur radio modem driver");
++
++#endif
++
++__initfunc(int init_module(void))
++{
++ int ret = yam_init(NULL);
++
++ return (ret == 1) ? 0 : ret;
++}
++
++/* --------------------------------------------------------------------- */
++
++void cleanup_module(void)
++{
++ int i;
++
++ del_timer(&yam_timer);
++ for(i = 0; i < NR_PORTS; i++) {
++ struct device *dev = &yam_ports[i].dev;
++ if (!dev->priv) continue;
++ if (dev->start) yam_close(dev);
++ unregister_netdev(dev);
++ }
++ free_mcs();
++ yam_net_procfs_remove();
++}
++
++#endif /* MODULE */
++/* --------------------------------------------------------------------- */
diff --git a/yamdrv/yamcfg.c b/yamdrv/yamcfg.c
new file mode 100644
index 0000000..59e2273
--- /dev/null
+++ b/yamdrv/yamcfg.c
@@ -0,0 +1,351 @@
+/*****************************************************************************/
+
+/*
+ * yaminit.c -- YAM radio modem driver setup utility.
+ *
+ * Copyright (C) 1998 Jean-Paul ROUBELAT (jpr@f6fbb.org)
+ * Adapted from sethdlc.c written by Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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.
+ *
+ * Please note that the GPL allows you to use the driver, NOT the radio.
+ * In order to use the radio, you need a license from the communications
+ * authority of your country.
+ *
+ *
+ * History:
+ * 0.0 29.07.98 First draft
+ */
+
+/*****************************************************************************/
+
+/* ---------------------------------------------------------------------- */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#include <netinet/if_ether.h>
+#include <asm/byteorder.h>
+
+#include "yam.h"
+
+static unsigned char bitswap (unsigned char c)
+{
+ unsigned char r = 0;
+ int i;
+
+ for (i = 0; i < 8; i++)
+ {
+ r <<= 1;
+ if (c & 1)
+ r |= 1;
+ c >>= 1;
+ }
+ return r;
+}
+
+static int in2hex (char *ptr)
+{
+ char str[3];
+ int val;
+
+ memcpy (str, ptr, 2);
+ str[2] = '\0';
+
+ sscanf (str, "%x", &val);
+
+ return val;
+}
+
+static int set_mcs (char *name, struct ifreq *ifr, int sock, int bitrate, char *filename)
+{
+ struct yamdrv_ioctl_mcs yammcs;
+ FILE *fptr;
+ int nb, i, type, pos;
+ char buf[256];
+
+ yammcs.bitrate = bitrate;
+
+ fptr = fopen (filename, "r");
+ if (fptr == NULL)
+ {
+ fprintf (stderr, "%s: file %s not found\n", name, filename);
+ return -1;
+ }
+
+ pos = 0;
+
+ while (fgets (buf, sizeof (buf), fptr))
+ {
+ nb = in2hex (buf + 1);
+ type = in2hex (buf + 7);
+
+ if (type != 0)
+ continue;
+
+ for (i = 0; i < nb; i++)
+ {
+ if (pos == YAM_FPGA_SIZE)
+ {
+ fclose (fptr);
+ printf ("fpga bytes are more than %d in %s mcs file\n", YAM_FPGA_SIZE, filename);
+ return -1;
+ }
+ yammcs.bits[pos++] = bitswap (in2hex (buf + 9 + i * 2));
+ }
+ }
+
+ fclose (fptr);
+
+ if (pos != YAM_FPGA_SIZE)
+ {
+ printf ("fpga bytes are not %d in %s mcs file\n", YAM_FPGA_SIZE, filename);
+ return -1;
+ }
+
+ ifr->ifr_data = (caddr_t) & yammcs;
+ yammcs.cmd = SIOCYAMSMCS;
+
+ if (ioctl (sock, SIOCDEVPRIVATE, ifr) == -1)
+ {
+ fprintf (stderr, "%s: Error %s (%i), cannot ioctl SIOCYAMSMCS on %s\n",
+ name, strerror (errno), errno, ifr->ifr_name);
+ return -1;
+ }
+
+ printf ("mcs file %s loaded for bitrate %d\n\n", filename, yammcs.bitrate);
+
+ return 0;
+}
+
+static int set_params (char *name, struct ifreq *ifr, int sock, int ac, char **av, unsigned *pmask)
+{
+ int len;
+ int bitrate = 0;
+ char *filename = NULL;
+ struct yamdrv_ioctl_cfg yamctl;
+
+ printf ("\n");
+
+ yamctl.cfg.mask = 0;
+
+ while (ac >= 2)
+ {
+ len = strlen (av[0]);
+ if (!strncasecmp (av[0], "iobase", len))
+ {
+ yamctl.cfg.iobase = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_IOBASE;
+ }
+ else if (!strncasecmp (av[0], "irq", len))
+ {
+ yamctl.cfg.irq = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_IRQ;
+ }
+ else if (!strncasecmp (av[0], "bitrate", len))
+ {
+ yamctl.cfg.bitrate = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_BITRATE;
+ }
+ else if (!strncasecmp (av[0], "baudrate", len))
+ {
+ yamctl.cfg.baudrate = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_BAUDRATE;
+ }
+ else if (!strncasecmp (av[0], "duplex", len))
+ {
+ yamctl.cfg.mode = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_MODE;
+ }
+ else if (!strncasecmp (av[0], "hold", len))
+ {
+ yamctl.cfg.holddly = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_HOLDDLY;
+ }
+ else if (!strncasecmp (av[0], "txdelay", len))
+ {
+ yamctl.cfg.txdelay = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_TXDELAY;
+ }
+ else if (!strncasecmp (av[0], "txtail", len))
+ {
+ yamctl.cfg.txtail = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_TXTAIL;
+ }
+ else if (!strncasecmp (av[0], "slottime", len))
+ {
+ yamctl.cfg.slottime = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_SLOTTIME;
+ }
+ else if (!strncasecmp (av[0], "persist", len))
+ {
+ yamctl.cfg.persist = strtoul (av[1], NULL, 0);
+ yamctl.cfg.mask |= YAM_PERSIST;
+ }
+ else if (!strncasecmp (av[0], "load", len))
+ {
+ if (ac < 3)
+ break;
+ bitrate = strtoul (av[1], NULL, 0);
+ filename = av[2];
+ av += 1;
+ ac -= 1;
+ }
+ else
+ {
+ fprintf (stderr, "%s: invalid parameter type '%s'\n",
+ name, av[0]);
+ }
+ av += 2;
+ ac -= 2;
+ }
+ if (ac > 0)
+ fprintf (stderr, "%s: orphaned parameter type '%s', no data\n",
+ name, av[0]);
+
+ if (yamctl.cfg.mask)
+ {
+ ifr->ifr_data = (caddr_t) & yamctl;
+ yamctl.cmd = SIOCYAMSCFG;
+ *pmask = yamctl.cfg.mask;
+
+ if (ioctl (sock, SIOCDEVPRIVATE, ifr) == -1)
+ {
+ fprintf (stderr, "%s: Error %s (%i), cannot ioctl SIOCYAMSCFG on %s\n",
+ name, strerror (errno), errno, ifr->ifr_name);
+ return -1;
+ }
+ }
+
+ if (filename)
+ return set_mcs (name, ifr, sock, bitrate, filename);
+
+ return 0;
+}
+
+#define is_mask(m, n) (m & n) ? '*' : ' '
+static void get_params (char *name, struct ifreq *ifr, int sock, unsigned mask)
+{
+ char *dup;
+ struct yamdrv_ioctl_cfg yamctl;
+
+ ifr->ifr_data = (caddr_t) & yamctl;
+ yamctl.cmd = SIOCYAMGCFG;
+
+ if (ioctl (sock, SIOCDEVPRIVATE, ifr) == -1)
+ {
+ fprintf (stderr, "%s: Error %s (%i), cannot ioctl SIOCYAMGCFG on %s\n",
+ name, strerror (errno), errno, ifr->ifr_name);
+ return;
+ }
+
+ switch (yamctl.cfg.mode)
+ {
+ case 0:
+ dup = "off";
+ break;
+ case 1:
+ dup = "on";
+ break;
+ case 2:
+ dup = "on+delay";
+ break;
+ default:
+ dup = "";
+ break;
+ }
+
+ printf ("Device : %s\n", ifr->ifr_name);
+ printf ("iobase :%c%04x\n", is_mask (mask, YAM_IOBASE), yamctl.cfg.iobase);
+ printf ("bitrate :%c%u (bps)\n", is_mask (mask, YAM_BITRATE), yamctl.cfg.bitrate);
+ printf ("irq :%c%u\n", is_mask (mask, YAM_IRQ), yamctl.cfg.irq);
+ printf ("baudrate :%c%u (bps)\n", is_mask (mask, YAM_BAUDRATE), yamctl.cfg.baudrate);
+ printf ("fulldup :%c%s\n", is_mask (mask, YAM_MODE), dup);
+ if (yamctl.cfg.mode == 2)
+ printf ("holddelay :%c%-3u (sec)\n", is_mask (mask, YAM_HOLDDLY), yamctl.cfg.holddly);
+ printf ("txdelay :%c%-3u (ms)\n", is_mask (mask, YAM_TXDELAY), yamctl.cfg.txdelay);
+ printf ("txtail :%c%-3u (ms)\n", is_mask (mask, YAM_TXTAIL), yamctl.cfg.txtail);
+ printf ("slottime :%c%-3u (ms)\n", is_mask (mask, YAM_SLOTTIME), yamctl.cfg.slottime);
+ printf ("persist :%c%u\n", is_mask (mask, YAM_PERSIST), yamctl.cfg.persist);
+ printf ("\n");
+}
+
+static const char *usage_str =
+"[-h] yamif\n"
+" [iobase <iobase>] [irq <irq>] [bitrate <bitrate>] [baudrate <baudrate>]\n"
+" [duplex <mode>] [hold <delay>] [txdelay <txdelay>]\n"
+" [txtail <txtail>] [slottime <slottime>] [persist <persistence>]\n"
+" [load <bitrate> <filename.mcs>]\n"
+" yamif: the name of the yam kernel driver interface (yam0)\n"
+" -h: this help\n\n";
+
+int main (int argc, char *argv[])
+{
+ char name[256] = "yam0";
+ struct ifreq ifr;
+ int sock;
+ unsigned int mask;
+
+ printf ("\n%s: Version 0.1 (C) 1998 by Jean-Paul ROUBELAT - F6FBB\n", *argv);
+
+ if ((argc < 2) || (strcasecmp (argv[1], "-h") == 0))
+ {
+ printf ("usage: %s %s", *argv, usage_str);
+ return 1;
+ }
+
+ strcpy (name, argv[1]);
+
+ if ((sock = socket (PF_INET, SOCK_PACKET, htons (ETH_P_AX25))) < 0)
+ {
+ fprintf (stderr, "%s: Error %s (%i), cannot open %s\n",
+ argv[0], strerror (errno), errno, name);
+ return 2;
+ }
+
+ strcpy (ifr.ifr_name, name);
+ if (ioctl (sock, SIOCGIFFLAGS, &ifr) < 0)
+ {
+ fprintf (stderr, "%s: Error %s (%i), cannot ioctl %s\n",
+ argv[0], strerror (errno), errno, name);
+ close (sock);
+ return 3;
+ }
+
+ mask = 0;
+
+ if (set_params (argv[0], &ifr, sock, argc - 2, argv + 2, &mask) == -1)
+ {
+ close (sock);
+ return 4;
+ }
+
+ get_params (argv[0], &ifr, sock, mask);
+
+ close (sock);
+
+ return 0;
+}