]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.40pre6 2.3.40pre6
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:30:16 +0000 (15:30 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:30:16 +0000 (15:30 -0500)
110 files changed:
CREDITS
Documentation/usb/CREDITS
Documentation/usb/ov511.txt
MAINTAINERS
Makefile
arch/alpha/defconfig
arch/arm/def-configs/a5k
arch/arm/def-configs/footbridge
arch/arm/def-configs/rpc
arch/arm/defconfig
arch/arm/kernel/bios32.c
arch/i386/kernel/acpi.c
arch/i386/kernel/io_apic.c
arch/i386/kernel/ls [new file with mode: 0644]
arch/i386/kernel/smp.c
arch/i386/kernel/smpboot.c
arch/i386/mm/init.c
arch/m68k/atari/stram.c
drivers/acorn/block/mfmhd.c
drivers/ap1000/ap.c
drivers/ap1000/ddv.c
drivers/block/Config.in
drivers/block/DAC960.c
drivers/block/acsi.c
drivers/block/alim15x3.c
drivers/block/cpqarray.c
drivers/block/floppy.c
drivers/block/hd.c
drivers/block/ide.c
drivers/block/loop.c
drivers/block/md.c
drivers/block/nbd.c
drivers/block/paride/pd.c
drivers/block/paride/pf.c
drivers/block/ps2esdi.c
drivers/block/rd.c
drivers/block/xd.c
drivers/cdrom/aztcd.c
drivers/cdrom/cdrom.c
drivers/cdrom/gscd.c
drivers/cdrom/optcd.c
drivers/cdrom/sjcd.c
drivers/cdrom/sonycd535.c
drivers/char/cyclades.c
drivers/char/pcmcia/Config.in
drivers/char/pcmcia/serial_cb.c
drivers/char/pcmcia/serial_cs.c
drivers/i2o/i2o_block.c
drivers/ieee1394/pcilynx.c
drivers/ieee1394/pcilynx.h
drivers/net/3c509.c
drivers/net/pcmcia/3c574_cs.c
drivers/net/pcmcia/3c575_cb.c
drivers/net/pcmcia/3c589_cs.c
drivers/net/pcmcia/Config.in
drivers/net/pcmcia/fmvj18x_cs.c
drivers/net/pcmcia/netwave_cs.c
drivers/net/pcmcia/nmclan_cs.c
drivers/net/pcmcia/pcnet_cs.c
drivers/net/pcmcia/smc91c92_cs.c
drivers/net/pcmcia/wavelan_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
drivers/pcmcia/bulkmem.c
drivers/pcmcia/cb_enabler.c
drivers/pcmcia/cistpl.c
drivers/pcmcia/cs.c
drivers/pcmcia/ds.c
drivers/pcmcia/i82365.c
drivers/pcmcia/pci_socket.h
drivers/pcmcia/ricoh.h
drivers/pcmcia/rsrc_mgr.c
drivers/pcmcia/tcic.c
drivers/scsi/ide-scsi.c
drivers/scsi/sd.c
drivers/sound/es1370.c
drivers/sound/es1371.c
drivers/sound/esssolo1.c
drivers/sound/sonicvibes.c
drivers/usb/acm.c
drivers/usb/hid-debug.h
drivers/usb/hid.c
drivers/usb/hid.h
drivers/usb/hub.h
drivers/usb/ov511.c
drivers/usb/ov511.h
drivers/usb/printer.c
drivers/usb/usb-debug.c
drivers/usb/usb-serial.c
drivers/usb/usb.c
drivers/usb/usb.h
drivers/usb/usb_scsi.c
drivers/usb/usbkbd.c
drivers/usb/whiteheat.h
fs/partitions/check.c
include/asm-arm/arch-sa1100/ide.h
include/asm-arm/arch-sa1100/uncompress.h
include/asm-i386/fixmap.h
include/asm-i386/pgalloc.h
include/asm-i386/pgtable.h
include/asm-i386/posix_types.h
include/linux/acpi.h
include/linux/blkdev.h
include/linux/cyclades.h
include/pcmcia/cisreg.h
include/pcmcia/cistpl.h
include/pcmcia/cs_types.h
include/pcmcia/version.h
kernel/ksyms.c
kernel/sys.c
mm/highmem.c

diff --git a/CREDITS b/CREDITS
index 80a8c5317ea69e4d08be6ba6752934ea90588d91..ea8764167fe8e8b09c1aed8c44d250db7db559f5 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1638,6 +1638,15 @@ N: David Parsons
 E: orc@pell.chi.il.us
 D: improved memory detection code.
 
+N: Ivan Passos
+E: ivan@cyclades.com
+D: Author of the Cyclades-PC300 synchronous card driver
+D: Maintainer of the Cyclom-Y/Cyclades-Z asynchronous card driver
+S: Cyclades Corp
+S: 41934 Christy St
+S: Fremont, CA 94538
+S: USA
+
 N: Mikulas Patocka
 E: mikulas@artax.karlin.mff.cuni.cz
 W: http://artax.karlin.mff.cuni.cz/~mikulas/
index 6f30946dc75721afc6c2034a88225791f513c497..738b55efcdd6b277b7ff887655cded3ebf08c894 100644 (file)
@@ -6,6 +6,7 @@ difficult to maintain, add yourself with a patch if desired.
 
   Georg Acher <acher@informatik.tu-muenchen.de>
   Alan Cox <alan@lxorguk.ukuu.org.uk>
+  Randy Dunlap <randy.dunlap@intel.com>
   Johannes Erdfelt <jerdfelt@sventech.com>
   Deti Fliegl <deti@fliegl.de>
   ham <ham@unsuave.com>
@@ -164,4 +165,3 @@ THANKS file in Inaky's driver):
           for convincing me USB Standard hubs are not that standard
           and that's good to allow for vendor specific quirks on the
           standard hub driver.
-
index 1feac49d1e520a30567caae71ef8c2c380c398a8..3a73afc0dcdc90294ae9999dcd1c59de2cd6e337 100644 (file)
@@ -2,22 +2,28 @@
 Readme for Linux device driver for the OmniVision OV511 USB to camera bridge IC
 -------------------------------------------------------------------------------
 
+Author: Mark McClelland
+Homepage: http://people.delphi.com/mmcclelland/linux/
+
 INTRODUCTION:
 
 This is a preliminary version of my OV511 Linux device driver. Currently, it can
-grab a frame in black-and-white at 640x480 using the vidcat utility. Color,
-variable image size, and compatibility with other apps are currently under
-development.
+grab a frame in color (YUV420) at 640x480 or 320x240 using either vidcat or
+xawtv. Other utilities may work but have not yet been tested.
+
+NOTE: 320x240 does not work reliably for me, and causes complete system crashes.
+      I recommend not using it until a later version, and if you do, run "sync"
+      first.
 
 SUPPORTED CAMERAS:
 ________________________________________________________
 Manufacturer     | Model          | Custom ID | Status
 -----------------+----------------+-----------+---------
 MediaForte       | MV300          | 0         | Untested
-D-Link           | DSB-C300          | 3         | Working
+D-Link           | DSB-C300       | 3         | Working
 Creative Labs    | WebCam 3       | 21        | Working
-Lifeview         | RoboCam        |    100       | Untested
-AverMedia        | InterCam Elite | 102       | Untested
+Lifeview         | RoboCam        | 100       | Untested
+AverMedia        | InterCam Elite | 102       | Working
 --------------------------------------------------------
 
 Any camera using the OV511 and the OV7610 CCD should work with this driver. The
@@ -32,9 +38,55 @@ WHAT YOU NEED:
 - If you want to help with the development, get the chip's specification docs at
   http://www.ovt.com/omniusbp.html
 
-- A Video4Linux compatible frame grabber program (I recommend vidcat)
+- A Video4Linux compatible frame grabber program (I recommend vidcat and xawtv)
   (see: http://www.exploits.org/v4l/ )
-  
+
+HOW TO USE IT:
+
+You must have first compiled USB support, support for your specific USB host
+controller (UHCI or OHCI), and Video4Linux support for your kernel (I recommend
+making them modules.) 
+
+Next, (as root) from your appropriate modules directory (lib/modules/2.3.XX):
+
+       insmod usb/usbcore.o
+       insmod usb/usb-uhci.o  <OR>  insmod usb/ohci-hcd.o
+       insmod misc/videodev.o
+       insmod usb/ov511.o
+
+If it is not already there (it usually is), create the video device:
+
+       mknod /dev/video c 81 0
+       
+Now you are ready to run a video app! Both vidcat and xawtv work well for me
+at 640x480.
+       
+[Using vidcat:]
+
+       vidcat -s 640x480 > test.jpg
+       xview test.jpg
+       
+[Using xawtv:]
+
+You must make some modifications to the source and compile it before you use it.
+(Note: this may not be applicable to versions other than 3.06)
+
+In src/Xawtv.ad, change xawtv.tv.width to 640 and xawtv.tv.height to 480. Next,
+in src/grab-v4l.c, change SYNC_TIMEOUT from 1 to 2. Then, from the main xawtv
+directory:
+
+       make clean
+       ./configure
+       make
+       make install
+
+Now you should be able to run xawtv. Right click for the options dialog.
+
+WORKING FEATURES:
+ o Color streaming/capture at 640x480 (reliably) and 320x240 (unreliably)
+ o YUV420 color
+ o Setting/getting of saturation, contrast and brightness (no color yet)
+
 WHAT NEEDS TO BE DONE:
 
 The rest of the work will involve implementing support for all the different
@@ -55,4 +107,4 @@ CREDITS:
 The code is based in no small part on the CPiA driver by Johannes Erdfelt,
 Randy Dunlap, and others. Big thanks to them for their pioneering work on that
 and the USB stack. Thanks to Bret Wallach for getting camera reg IO , ISOC, and
-preliminary image capture working.
+image capture working.
index b598c25a309071c380f930b349d472101d3723f5..302705aec01c319d8ad97e824e9d857be551fea0 100644 (file)
@@ -243,7 +243,7 @@ S:  Maintained
 
 CYCLADES ASYNC MUX DRIVER
 P:     Ivan Passos
-M:     Ivan Passos <ivan@cyclades.com>
+M:     ivan@cyclades.com
 W:     http://www.cyclades.com/
 S:     Supported
 
index a40fc68281515ef3319390ba04502e20b690f42f..a09e6233403397907467d7b6a884afb79a9ad519 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -206,7 +206,7 @@ ifdef CONFIG_PPC
 DRIVERS := $(DRIVERS) drivers/macintosh/macintosh.a
 endif
 
-ifeq ($(CONFIG_PNP),y)
+ifeq ($(CONFIG_ISAPNP),y)
 DRIVERS := $(DRIVERS) drivers/pnp/isa-pnp.o
 endif
 
@@ -487,7 +487,7 @@ depend dep: dep-files $(MODVERFILE)
 
 # make checkconfig: Prune 'scripts' directory to avoid "false positives".
 checkconfig:
-       perl -w scripts/checkconfig.pl `find * -path 'scripts' -prune -o -name '*.[hcS]' -print | sort`
+       find * -name '*.[hcS]' -type f -print | grep -v scripts/ | sort | xargs perl -w scripts/checkconfig.pl
 
 checkhelp:
        perl -w scripts/checkhelp.pl `find * -name [cC]onfig.in -print`
index d996415290c264d61562c31ffdc0fa45abeea60b..9365dc4e22b03fc8423f084e33e974f856ec334e 100644 (file)
@@ -47,6 +47,7 @@ CONFIG_ALPHA_GENERIC=y
 CONFIG_PCI=y
 # CONFIG_SMP is not set
 CONFIG_PCI_NAMES=y
+# CONFIG_HOTPLUG is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
@@ -248,11 +249,6 @@ CONFIG_DE4X5=y
 #
 # CONFIG_WAN is not set
 
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
 #
 # Amateur Radio support
 #
@@ -321,12 +317,6 @@ CONFIG_PSMOUSE=y
 # CONFIG_FTAPE is not set
 # CONFIG_DRM is not set
 # CONFIG_DRM_TDFX is not set
-CONFIG_PCMCIA_SERIAL=y
-
-#
-# PCMCIA character device support
-#
-# CONFIG_PCMCIA_SERIAL_CS is not set
 
 #
 # USB support
index 21a6488eb2f566f0b4108aab8677f53f6aea5c2b..b5fd4b31546924d4819e459f0a14a3c3b7ba61cc 100644 (file)
@@ -167,11 +167,6 @@ CONFIG_MOUSE=y
 # CONFIG_FTAPE is not set
 # CONFIG_DRM is not set
 # CONFIG_DRM_TDFX is not set
-
-#
-# PCMCIA character device support
-#
-# CONFIG_PCMCIA_SERIAL_CS is not set
 # CONFIG_AGP is not set
 
 #
@@ -328,11 +323,6 @@ CONFIG_ARM_ETHER3=y
 #
 # CONFIG_WAN is not set
 
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
 #
 # SCSI support
 #
index e43a8d2a9a42e948807f9fea7e60d35a3276ac73..d68d0b358b307e0be2ddd2a8e0e10e52e84da913 100644 (file)
@@ -54,7 +54,6 @@ CONFIG_BINFMT_ELF=y
 CONFIG_PARPORT=y
 CONFIG_PARPORT_PC=y
 CONFIG_PARPORT_PC_FIFO=y
-# CONFIG_PARPORT_PC_PCMCIA is not set
 # CONFIG_PARPORT_ARC is not set
 # CONFIG_PARPORT_AMIGA is not set
 # CONFIG_PARPORT_MFC3 is not set
@@ -264,12 +263,6 @@ CONFIG_VIDEO_CYBERPRO=m
 # CONFIG_DRM is not set
 # CONFIG_DRM_TDFX is not set
 
-#
-# PCMCIA character device support
-#
-# CONFIG_PCMCIA_SERIAL_CS is not set
-# CONFIG_AGP is not set
-
 #
 # Support for USB
 #
@@ -503,11 +496,6 @@ CONFIG_SLIP_MODE_SLIP6=y
 #
 # CONFIG_WAN is not set
 
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
 #
 # SCSI support
 #
index a22e1d99258583bfab1decd1070bffbe3065b7cf..e801bf641c428296a76f16fdc0d6db343ed22e47 100644 (file)
@@ -50,7 +50,6 @@ CONFIG_BINFMT_ELF=y
 CONFIG_PARPORT=y
 CONFIG_PARPORT_PC=y
 # CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_PCMCIA is not set
 # CONFIG_PARPORT_ARC is not set
 # CONFIG_PARPORT_AMIGA is not set
 # CONFIG_PARPORT_MFC3 is not set
@@ -177,11 +176,6 @@ CONFIG_MOUSE=y
 # CONFIG_FTAPE is not set
 # CONFIG_DRM is not set
 # CONFIG_DRM_TDFX is not set
-
-#
-# PCMCIA character device support
-#
-# CONFIG_PCMCIA_SERIAL_CS is not set
 # CONFIG_AGP is not set
 CONFIG_RPCMOUSE=y
 
@@ -354,11 +348,6 @@ CONFIG_PPP=m
 #
 # CONFIG_WAN is not set
 
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
 #
 # SCSI support
 #
index e43a8d2a9a42e948807f9fea7e60d35a3276ac73..472c637c3f207d0501912c9178dbca0cd0ed13e0 100644 (file)
@@ -54,7 +54,6 @@ CONFIG_BINFMT_ELF=y
 CONFIG_PARPORT=y
 CONFIG_PARPORT_PC=y
 CONFIG_PARPORT_PC_FIFO=y
-# CONFIG_PARPORT_PC_PCMCIA is not set
 # CONFIG_PARPORT_ARC is not set
 # CONFIG_PARPORT_AMIGA is not set
 # CONFIG_PARPORT_MFC3 is not set
@@ -263,11 +262,6 @@ CONFIG_VIDEO_CYBERPRO=m
 # CONFIG_FTAPE is not set
 # CONFIG_DRM is not set
 # CONFIG_DRM_TDFX is not set
-
-#
-# PCMCIA character device support
-#
-# CONFIG_PCMCIA_SERIAL_CS is not set
 # CONFIG_AGP is not set
 
 #
@@ -503,11 +497,6 @@ CONFIG_SLIP_MODE_SLIP6=y
 #
 # CONFIG_WAN is not set
 
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
 #
 # SCSI support
 #
index 4ce3079b471c98ec15994a9551517e588c258054..d055ae1fb23f68ea417806a3ab59f3e0fe5ad093 100644 (file)
@@ -5,6 +5,7 @@
  *
  * Bits taken from various places.
  */
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/pci.h>
 #include <linux/errno.h>
index 6b51332a0f008b10cfbaa366b6e860b0f3e9eff9..8df3b80dfd6acc03eb15084d574f2699a1662758 100644 (file)
@@ -172,6 +172,14 @@ static struct ctl_table acpi_table[] =
         &acpi_p_lvl3_lat, sizeof(acpi_p_lvl3_lat),
         0644, NULL, &acpi_do_ulong},
 
+       {ACPI_P_LVL2_LAT, "enter_lvl2_lat",
+        &acpi_enter_lvl2_lat, sizeof(acpi_enter_lvl2_lat),
+        0644, NULL, &acpi_do_ulong},
+
+       {ACPI_ENTER_LVL3_LAT, "enter_lvl3_lat",
+        &acpi_enter_lvl3_lat, sizeof(acpi_enter_lvl3_lat),
+        0644, NULL, &acpi_do_ulong},
+
        {ACPI_S0_SLP_TYP, "s0_slp_typ",
         &acpi_slp_typ[ACPI_S0], sizeof(acpi_slp_typ[ACPI_S0]),
         0600, NULL, &acpi_do_ulong},
@@ -195,6 +203,17 @@ static struct ctl_table acpi_dir_table[] =
        {0}
 };
 
+static u32 FASTCALL(acpi_read_pm1_control(struct acpi_facp *));
+static u32 FASTCALL(acpi_read_pm1_status(struct acpi_facp *));
+static u32 FASTCALL(acpi_read_pm1_enable(struct acpi_facp *));
+static u32 FASTCALL(acpi_read_gpe_status(struct acpi_facp *));
+static u32 FASTCALL(acpi_read_gpe_enable(struct acpi_facp *));
+
+static void FASTCALL(acpi_write_pm1_control(struct acpi_facp *, u32));
+static void FASTCALL(acpi_write_pm1_status(struct acpi_facp *, u32));
+static void FASTCALL(acpi_write_pm1_enable(struct acpi_facp *, u32));
+static void FASTCALL(acpi_write_gpe_status(struct acpi_facp *, u32));
+static void FASTCALL(acpi_write_gpe_enable(struct acpi_facp *, u32));
 
 /*
  * Get the value of the PM1 control register (SCI_EN, ...)
@@ -501,14 +520,21 @@ static void acpi_destroy_tables(void)
 }
 
 /*
- * Init PIIX4 device and create a fake FACP
+ * Locate PIIX4 device and create a fake FACP
  */
-static int __init acpi_init_piix4(struct pci_dev *dev)
+static int __init acpi_find_piix4(void)
 {
+       struct pci_dev *dev;
        u32 base;
        u16 cmd;
        u8 pmregmisc;
 
+       dev = pci_find_device(PCI_VENDOR_ID_INTEL,
+                             PCI_DEVICE_ID_INTEL_82371AB_3,
+                             NULL);
+       if (!dev)
+               return -ENODEV;
+       
        pci_read_config_word(dev, PCI_COMMAND, &cmd);
        if (!(cmd & PCI_COMMAND_IO))
                return -ENODEV;
@@ -560,72 +586,6 @@ static int __init acpi_init_piix4(struct pci_dev *dev)
        return 0;
 }
 
-/*
- * Init VIA ACPI device and create a fake FACP
- */
-static int __init acpi_init_via(struct pci_dev *dev)
-{
-       u32 base;
-       u8 tmp, irq;
-       
-       pci_read_config_byte(dev, 0x41, &tmp);
-       if (!(tmp & 0x80))
-               return -ENODEV;
-       
-       pci_read_config_byte(dev, 8, &tmp);
-       tmp = (tmp & 0x10 ? 0x48 : 0x20);
-       
-       pci_read_config_dword(dev, tmp, &base);
-       if (!(base & PCI_BASE_ADDRESS_SPACE_IO))
-               return -ENODEV;
-       
-       base &= PCI_BASE_ADDRESS_IO_MASK;
-       if (!base)
-               return -ENODEV;
-
-       pci_read_config_byte(dev, 0x42, &irq);
-
-       printk(KERN_INFO "ACPI: found %s at 0x%04x\n", dev->name, base);
-
-       acpi_facp = kmalloc(sizeof(struct acpi_facp), GFP_KERNEL);
-       if (!acpi_facp)
-               return -ENOMEM;
-
-       acpi_fake_facp = 1;
-       memset(acpi_facp, 0, sizeof(struct acpi_facp));
-
-       acpi_facp->int_model = ACPI_VIA_INT_MODEL;
-       acpi_facp->sci_int = irq;
-       acpi_facp->smi_cmd = base + ACPI_VIA_SMI_CMD;
-       acpi_facp->acpi_enable = ACPI_VIA_ACPI_ENABLE;
-       acpi_facp->acpi_disable = ACPI_VIA_ACPI_DISABLE;
-       acpi_facp->pm1a_evt = base + ACPI_PIIX4_PM1_EVT;
-       acpi_facp->pm1a_cnt = base + ACPI_PIIX4_PM1_CNT;
-       acpi_facp->pm_tmr = base + ACPI_VIA_PM_TMR;
-       acpi_facp->gpe0 = base + ACPI_VIA_GPE0;
-
-       acpi_facp->pm1_evt_len = ACPI_VIA_PM1_EVT_LEN;
-       acpi_facp->pm1_cnt_len = ACPI_VIA_PM1_CNT_LEN;
-       acpi_facp->pm_tm_len = ACPI_VIA_PM_TM_LEN;
-       acpi_facp->gpe0_len = ACPI_VIA_GPE0_LEN;
-       acpi_facp->p_lvl2_lat = (__u16) ACPI_INFINITE_LAT;
-       acpi_facp->p_lvl3_lat = (__u16) ACPI_INFINITE_LAT;
-
-       acpi_facp->duty_offset = ACPI_VIA_DUTY_OFFSET;
-       acpi_facp->duty_width = ACPI_VIA_DUTY_WIDTH;
-
-       acpi_facp->day_alarm = ACPI_VIA_DAY_ALARM;
-       acpi_facp->mon_alarm = ACPI_VIA_MON_ALARM;
-       acpi_facp->century = ACPI_VIA_CENTURY;
-
-       acpi_facp_addr = virt_to_phys(acpi_facp);
-       acpi_dsdt_addr = 0;
-
-       acpi_p_blk = base + ACPI_VIA_P_BLK;
-
-       return 0;
-}
-
 /*
  * Handle an ACPI SCI (fixed or general purpose event)
  */
@@ -702,43 +662,49 @@ static int acpi_disable(struct acpi_facp *facp)
        return 0;
 }
 
-static inline int bm_activity(void)
+static inline int bm_activity(struct acpi_facp *facp)
 {
-       return 0 && acpi_read_pm1_status(acpi_facp) & ACPI_BM;
+       return acpi_read_pm1_status(facp) & ACPI_BM;
 }
 
-static inline void clear_bm_activity(void)
+static inline void clear_bm_activity(struct acpi_facp *facp)
 {
-       acpi_write_pm1_status(acpi_facp, ACPI_BM);
+       acpi_write_pm1_status(facp, ACPI_BM);
 }
 
-static void sleep_on_busmaster(void)
+static void sleep_on_busmaster(struct acpi_facp *facp)
 {
-       u32 pm1_cntr = acpi_read_pm1_control(acpi_facp);
+       u32 pm1_cntr = acpi_read_pm1_control(facp);
        if (pm1_cntr & ACPI_BM_RLD) {
                pm1_cntr &= ~ACPI_BM_RLD;
-               acpi_write_pm1_control(acpi_facp, pm1_cntr);
+               acpi_write_pm1_control(facp, pm1_cntr);
        }
 }
 
-static void wake_on_busmaster(void)
+static void wake_on_busmaster(struct acpi_facp *facp)
 {
-       u32 pm1_cntr = acpi_read_pm1_control(acpi_facp);
+       u32 pm1_cntr = acpi_read_pm1_control(facp);
        if (!(pm1_cntr & ACPI_BM_RLD)) {
                pm1_cntr |= ACPI_BM_RLD;
-               acpi_write_pm1_control(acpi_facp, pm1_cntr);
+               acpi_write_pm1_control(facp, pm1_cntr);
        }
-       clear_bm_activity();
+       clear_bm_activity(facp);
 }
 
+/* The ACPI timer is just the low 24 bits */
+#define TIME_BEGIN(tmr)                        inl(tmr)
+#define TIME_END(tmr, begin)           ((inl(tmr) - (begin)) & 0x00ffffff)
+
+
 /*
  * Idle loop (uniprocessor only)
  */
 static void acpi_idle_handler(void)
 {
        static int sleep_level = 1;
+       struct acpi_facp *facp = acpi_facp;
 
-       if (!acpi_facp->pm_tmr || !acpi_p_blk)
+       if (!facp || !facp->pm_tmr || !acpi_p_blk)
                goto not_initialized;
 
        /*
@@ -746,86 +712,109 @@ static void acpi_idle_handler(void)
         */
        if (sleep_level == 1)
                goto sleep1;
-       if (sleep_level == 2 || bm_activity())
+       if (sleep_level == 2)
                goto sleep2;
 sleep3:
        sleep_level = 3;
        if (!acpi_p_lvl3_tested) {
-               printk(KERN_INFO "ACPI C3 works\n");
+               printk("ACPI C3 works\n");
                acpi_p_lvl3_tested = 1;
        }
-       wake_on_busmaster();
-       if (acpi_facp->pm2_cnt)
+       wake_on_busmaster(facp);
+       if (facp->pm2_cnt)
                goto sleep3_with_arbiter;
 
        for (;;) {
                unsigned long time;
+               unsigned int pm_tmr = facp->pm_tmr;
+
                __cli();
                if (current->need_resched)
                        goto out;
-               time = inl(acpi_facp->pm_tmr);
+               if (bm_activity(facp))
+                       goto sleep2;
+
+               time = TIME_BEGIN(pm_tmr);
                inb(acpi_p_blk + ACPI_P_LVL3);
-               time = inl(acpi_facp->pm_tmr) - time;
+               inl(pm_tmr);                                    /* Dummy read, force synchronization with the PMU */
+               time = TIME_END(pm_tmr, time);
+
                __sti();
-               if (time > acpi_p_lvl3_lat || bm_activity())
+               if (time < acpi_p_lvl3_lat)
                        goto sleep2;
        }
 
 sleep3_with_arbiter:
        for (;;) {
                unsigned long time;
-               unsigned int pm2_cntr = acpi_facp->pm2_cnt;
+               u8 arbiter;
+               unsigned int pm2_cntr = facp->pm2_cnt;
+               unsigned int pm_tmr = facp->pm_tmr;
+
                __cli();
                if (current->need_resched)
                        goto out;
-               time = inl(acpi_facp->pm_tmr);
-               outb(inb(pm2_cntr) | ACPI_ARB_DIS, pm2_cntr);
+               if (bm_activity(facp))
+                       goto sleep2;
+
+               time = TIME_BEGIN(pm_tmr);
+               arbiter = inb(pm2_cntr) & ~ACPI_ARB_DIS;
+               outb(arbiter | ACPI_ARB_DIS, pm2_cntr);         /* Disable arbiter, park on CPU */
                inb(acpi_p_blk + ACPI_P_LVL3);
-               outb(inb(pm2_cntr) & ~ACPI_ARB_DIS, pm2_cntr);
-               time = inl(acpi_facp->pm_tmr) - time;
+               inl(pm_tmr);                                    /* Dummy read, force synchronization with the PMU */
+               time = TIME_END(pm_tmr, time);
+               outb(arbiter, pm2_cntr);                        /* Enable arbiter again.. */
+
                __sti();
-               if (time > acpi_p_lvl3_lat || bm_activity())
+               if (time < acpi_p_lvl3_lat)
                        goto sleep2;
        }
 
 sleep2:
        sleep_level = 2;
        if (!acpi_p_lvl2_tested) {
-               printk(KERN_INFO "ACPI C2 works\n");
+               printk("ACPI C2 works\n");
                acpi_p_lvl2_tested = 1;
        }
-       wake_on_busmaster();    /* Required to track BM activity.. */
+       wake_on_busmaster(facp);        /* Required to track BM activity.. */
        for (;;) {
                unsigned long time;
+               unsigned int pm_tmr = facp->pm_tmr;
+
                __cli();
                if (current->need_resched)
                        goto out;
-               time = inl(acpi_facp->pm_tmr);
+
+               time = TIME_BEGIN(pm_tmr);
                inb(acpi_p_blk + ACPI_P_LVL2);
-               time = inl(acpi_facp->pm_tmr) - time;
+               inl(pm_tmr);                                    /* Dummy read, force synchronization with the PMU */
+               time = TIME_END(pm_tmr, time);
+
                __sti();
-               if (time > acpi_p_lvl2_lat)
+               if (time < acpi_p_lvl2_lat)
                        goto sleep1;
-               if (bm_activity()) {
-                       clear_bm_activity();
+               if (bm_activity(facp)) {
+                       clear_bm_activity(facp);
                        continue;
                }
-               if (time < acpi_enter_lvl3_lat)
+               if (time > acpi_enter_lvl3_lat)
                        goto sleep3;
        }
 
 sleep1:
        sleep_level = 1;
-       sleep_on_busmaster();
+       sleep_on_busmaster(facp);
        for (;;) {
                unsigned long time;
+               unsigned int pm_tmr = facp->pm_tmr;
+
                __cli();
                if (current->need_resched)
                        goto out;
-               time = inl(acpi_facp->pm_tmr);
+               time = TIME_BEGIN(pm_tmr);
                __asm__ __volatile__("sti ; hlt": : :"memory");
-               time = inl(acpi_facp->pm_tmr) - time;
-               if (time < acpi_enter_lvl2_lat)
+               time = TIME_END(pm_tmr, time);
+               if (time > acpi_enter_lvl2_lat)
                        goto sleep2;
        }
 
@@ -1219,34 +1208,6 @@ static int acpi_do_sleep(ctl_table *ctl,
        return 0;
 }
 
-static struct acpi_device {
-       unsigned short vendor, device;
-       int (*init)(struct pci_dev *);
-} acpi_devices[] __initdata = {
-       {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, acpi_init_piix4 },
-       {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, acpi_init_via },
-};
-
-#define NR_ACPI_DEVICES        (sizeof(acpi_devices)/sizeof(struct acpi_device))
-
-static int __init acpi_find_devices(void)
-{
-       struct pci_dev *dev;
-
-       pci_for_each_dev(dev) {
-               int i;
-
-               for (i = 0; i < NR_ACPI_DEVICES; i++) {
-                       struct acpi_device *p = acpi_devices + i;
-
-                       if (dev->vendor == p->vendor && dev->device == p->device)
-                               return p->init(dev);
-               }
-       }
-       return -ENOENT;
-}
-
-
 /*
  * Initialize and enable ACPI
  */
@@ -1257,17 +1218,17 @@ static int __init acpi_init(void)
        if (acpi_disabled)
                return -ENODEV;
 
-       if (acpi_find_tables() && acpi_find_devices()) {
-               // no ACPI tables and not a recognized ACPI chipset
+       if (acpi_find_tables() && acpi_find_piix4()) {
+               // no ACPI tables and not PIIX4
                return -ENODEV;
        }
 
-       /*
-        * Internally we always keep latencies in timer
-        * ticks, which is simpler and more consistent (what is
-        * an uS to us?). Besides, that gives people more
-        * control in the /proc interfaces.
-        */
+       /*
+        * Internally we always keep latencies in timer
+        * ticks, which is simpler and more consistent (what is
+        * an uS to us?). Besides, that gives people more
+        * control in the /proc interfaces.
+        */
        if (acpi_facp->p_lvl2_lat
            && acpi_facp->p_lvl2_lat <= ACPI_MAX_P_LVL2_LAT) {
                acpi_p_lvl2_lat = ACPI_uS_TO_TMR_TICKS(acpi_facp->p_lvl2_lat);
index ef36439a8a0d4cc5ad5aeded5a2954e25198608b..db6587a320bb6abd968897ed543e25e3fcad89ef 100644 (file)
@@ -997,7 +997,7 @@ void disable_IO_APIC(void)
        }
 }
 
-static void __init setup_ioapic_id(void)
+static void __init setup_ioapic_default_id(void)
 {
        struct IO_APIC_reg_00 reg_00;
 
@@ -1031,6 +1031,47 @@ static void __init setup_ioapic_id(void)
                panic("could not set ID");
 }
 
+/*
+ * function to set the IO-APIC physical IDs based on the
+ * values stored in the MPC table.
+ *
+ * by Matt Domsch <Matt_Domsch@dell.com>  Tue Dec 21 12:25:05 CST 1999
+ */
+
+static void __init setup_ioapic_ids_from_mpc (void)
+{
+       struct IO_APIC_reg_00 reg_00;
+       int apic;
+
+       /*
+        * Set the IOAPIC ID to the value stored in the MPC table.
+        */
+       for (apic = 0; apic < nr_ioapics; apic++) {
+
+               /* Read the register 0 value */
+               *(int *)&reg_00 = io_apic_read(apic, 0);
+               
+               /*
+                * Read the right value from the MPC table and
+                * write it into the ID register.
+                */
+               printk("...changing IO-APIC physical APIC ID to %d ...",
+                                       mp_ioapics[apic].mpc_apicid);
+
+               reg_00.ID = mp_ioapics[apic].mpc_apicid;
+               io_apic_write(apic, 0, *(int *)&reg_00);
+
+               /*
+                * Sanity check
+                */
+               *(int *)&reg_00 = io_apic_read(apic, 0);
+               if (reg_00.ID != mp_ioapics[apic].mpc_apicid)
+                       panic("could not set ID!\n");
+               else
+                       printk(" ok.\n");
+       }
+}
+
 static void __init construct_default_ISA_mptable(void)
 {
        int i, pos = 0;
@@ -1071,7 +1112,7 @@ static void __init construct_default_ISA_mptable(void)
                        mp_irqs[0].mpc_dstirq = 2;
        }
 
-       setup_ioapic_id();
+       setup_ioapic_default_id();
 }
 
 /*
@@ -1424,6 +1465,7 @@ void __init setup_IO_APIC(void)
         * Set up the IO-APIC IRQ routing table by parsing the MP-BIOS
         * mptable:
         */
+       setup_ioapic_ids_from_mpc();
        setup_IO_APIC_irqs();
        init_IO_APIC_traps();
        check_timer();
diff --git a/arch/i386/kernel/ls b/arch/i386/kernel/ls
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index b106c412d016226b5707bf85dc27230087558316..2fe7c7522a84860f52ee97f2f889b0af92718c48 100644 (file)
@@ -390,11 +390,27 @@ static inline void do_flush_tlb_all_local(void)
        }
 }
 
+static inline void do_flush_tlb_all_kernel_local(void)
+{
+       __flush_tlb_global();
+       if (!current->mm && current->active_mm) {
+               unsigned long cpu = smp_processor_id();
+
+               clear_bit(cpu, &current->active_mm->cpu_vm_mask);
+               cpu_tlbbad[cpu] = 1;
+       }
+}
+
 static void flush_tlb_all_ipi(void* info)
 {
        do_flush_tlb_all_local();
 }
 
+static void flush_tlb_all_kernel_ipi(void* info)
+{
+       do_flush_tlb_all_kernel_local();
+}
+
 void flush_tlb_all(void)
 {
        smp_call_function (flush_tlb_all_ipi,0,1,1);
@@ -402,6 +418,12 @@ void flush_tlb_all(void)
        do_flush_tlb_all_local();
 }
 
+void flush_tlb_all_kernel(void)
+{
+       smp_call_function (flush_tlb_all_kernel_ipi,0,1,1);
+       do_flush_tlb_all_kernel_local();
+}
+
 /*
  * this function sends a 'reschedule' IPI to another CPU.
  * it goes straight through and wastes no time serializing
index e003f0c3c788ce576a17f916b71d4e70c240d6b9..9b228851e8af40997428ed6c81aed424a1f831d4 100644 (file)
@@ -865,7 +865,7 @@ void __init init_smp_mappings(void)
                apic_phys = (unsigned long) alloc_bootmem_pages(PAGE_SIZE);
                apic_phys = __pa(apic_phys);
        }
-       set_fixmap(FIX_APIC_BASE, apic_phys);
+       set_fixmap_nocache(FIX_APIC_BASE, apic_phys);
        dprintk("mapped APIC to %08lx (%08lx)\n", APIC_BASE, apic_phys);
 
 #ifdef CONFIG_X86_IO_APIC
@@ -880,7 +880,7 @@ void __init init_smp_mappings(void)
                                ioapic_phys = (unsigned long) alloc_bootmem_pages(PAGE_SIZE);
                                ioapic_phys = __pa(ioapic_phys);
                        }
-                       set_fixmap(idx,ioapic_phys);
+                       set_fixmap_nocache(idx, ioapic_phys);
                        dprintk("mapped IOAPIC to %08lx (%08lx)\n",
                                        __fix_to_virt(idx), ioapic_phys);
                        idx++;
index b99daee8460ba65f17f48bbeab735ce18cc14b47..d72b21caee7f075406171494453257e50a1e3ff5 100644 (file)
@@ -239,7 +239,8 @@ void show_mem(void)
 extern char _text, _etext, _edata, __bss_start, _end;
 extern char __init_begin, __init_end;
 
-static void set_pte_phys (unsigned long vaddr, unsigned long phys)
+static inline void set_pte_phys (unsigned long vaddr,
+                       unsigned long phys, pgprot_t flags)
 {
        pgprot_t prot;
        pgd_t *pgd;
@@ -249,7 +250,7 @@ static void set_pte_phys (unsigned long vaddr, unsigned long phys)
        pgd = swapper_pg_dir + __pgd_offset(vaddr);
        pmd = pmd_offset(pgd, vaddr);
        pte = pte_offset(pmd, vaddr);
-       prot = PAGE_KERNEL;
+       prot = flags;
        if (boot_cpu_data.x86_capability & X86_FEATURE_PGE)
                pgprot_val(prot) |= _PAGE_GLOBAL;
        set_pte(pte, mk_pte_phys(phys, prot));
@@ -260,15 +261,15 @@ static void set_pte_phys (unsigned long vaddr, unsigned long phys)
        __flush_tlb_one(vaddr);
 }
 
-void set_fixmap (enum fixed_addresses idx, unsigned long phys)
+void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags)
 {
        unsigned long address = __fix_to_virt(idx);
 
        if (idx >= __end_of_fixed_addresses) {
-               printk("Invalid set_fixmap\n");
+               printk("Invalid __set_fixmap\n");
                return;
        }
-       set_pte_phys(address,phys);
+       set_pte_phys(address, phys, flags);
 }
 
 static void __init fixrange_init (unsigned long start, unsigned long end, pgd_t *pgd_base)
@@ -414,7 +415,7 @@ void __init zap_low_mappings (void)
 #else
                set_pgd(swapper_pg_dir+i, __pgd(0));
 #endif
-       flush_tlb_all();
+       flush_tlb_all_kernel();
 }
 
 /*
index 81dc171038af87a189fddb71b44bd47c7985ca60..cbccf39563130b7da329f42b29721ed103bd1075 100644 (file)
@@ -1255,6 +1255,8 @@ int __init stram_device_init(void)
     blksize_size[STRAM_MAJOR] = stram_blocksizes;
        stram_sizes[STRAM_MINOR] = (swap_end - swap_start)/1024;
     blk_size[STRAM_MAJOR] = stram_sizes;
+       register_disk(NULL, MKDEV(STRAM_MAJOR, STRAM_MINOR), 1, &stram_fops,
+                       (swap_end-swap_start)>>9);
        do_z2_request(); /* to avoid warning */
        return( 0 );
 }
index 7db80f3e49d07ceca811d7e95dd988f38ed65d74..d30251fbb258c2828f2d3dee6960c7fa92b23315 100644 (file)
@@ -1323,6 +1323,13 @@ static struct gendisk mfm_gendisk = {
        NULL                    /* next */
 };
 
+static struct block_device_operations mfm_fops =
+{
+       open:           mfm_open,
+       release:        mfm_release,
+       ioctl:          mfm_ioctl,
+};
+
 static void mfm_geninit (void)
 {
        int i;
@@ -1349,19 +1356,13 @@ static void mfm_geninit (void)
 
        for (i = 0; i < mfm_drives; i++) {
                mfm_geometry (i);
-               grok_partitions(&mfm_gendisk, i, 1<<6, mfm_info[i].cylinders *
-                               mfm_info[i].heads * mfm_info[i].sectors / 2);
+               register_disk(&mfm_gendisk, MKDEV(MAJOR_NR,i<<6), 1<<6,
+                               &mfm_fops,
+                               mfm_info[i].cylinders * mfm_info[i].heads *
+                               mfm_info[i].sectors / 2);
        }
 }
 
-static struct block_device_operations mfm_fops =
-{
-       open:           mfm_open,
-       release:        mfm_release,
-       ioctl:          mfm_ioctl,
-};
-
-
 static struct expansion_card *ecs;
 
 /*
@@ -1510,7 +1511,7 @@ static int mfm_reread_partitions(kdev_t dev)
 #ifdef MODULE
 int init_module(void)
 {
-       return mfm_geninit();
+       return mfm_init();
 }
 
 void cleanup_module(void)
index 66c37290c6e9b71f3fce906d15217ab691022855..6e05d7cb5d58dd2acf8e9c75890ab3695f6aab63 100644 (file)
@@ -274,6 +274,8 @@ int ap_init(void)
   blksize_size[MAJOR_NR] = ap_blocksizes;
 
   read_ahead[MAJOR_NR] = 32; /* 16k read ahead */
+  for (i=0;i<NUM_APDEVS;i++)
+       register_disk(NILL, MKDEV(MAJOR_NR,i), 1, &ap_fops, 0);
 
   return(0);
 }
index 86a01136efe5e3f300fde2fd9e14569114f446b8..3e32c9c837fe397b9fbcfff6620eb3c27266b85d 100644 (file)
@@ -688,6 +688,7 @@ static void ddv_open_reply(struct cap_request *creq)
        wake_up(&busy_wait);    
 }
 
+extern struct block_device_operations ddv_fops;
 
 static void ddv_load_opiu(void)
 {
@@ -731,7 +732,8 @@ static void ddv_load_opiu(void)
        ddv_geometry.cylinders = ddv_sect_length[0] / 
                (ddv_geometry.heads*ddv_geometry.sectors);
 
-       grok_partitions(&ddv_gendisk, 0, 1<<PARTN_BITS, ddv_sect_length[0]);
+       register_disk(&ddv_gendisk, MKDEV(MAJOR_NR,0), 1<<PARTN_BITS,
+                       &ddv_fops, ddv_sect_length[0]);
        
        /* FIXME. The crap below is, well, crap. Pseudo-RAID and unsafe one */
        for (i=0;i<PARDISK_BASE;i++) {
index ad20fd2947b142eae43401466fb17774d78e90b6..e27fb0109daf162e1295002007c1753df9ba0276 100644 (file)
@@ -59,10 +59,6 @@ else
            if [ "$CONFIG_IDEDMA_PCI_EXPERIMENTAL" = "y" -a "$CONFIG_BLK_DEV_AEC6210" = "y" ]; then
               bool '      AEC6210 Tuning support (EXPERIMENTAL)' CONFIG_BLK_DEV_AEC6210_TUNING
            fi
-           bool '    ALI M15x3 chipset support' CONFIG_BLK_DEV_ALI15X3
-           if [ "$CONFIG_IDEDMA_PCI_EXPERIMENTAL" = "y" ]; then
-              bool '    AMD Viper support (EXPERIMENTAL)' CONFIG_BLK_DEV_AMD7409
-           fi
            bool '    CMD64X chipset support' CONFIG_BLK_DEV_CMD64X
            if [ "$CONFIG_BLK_DEV_CMD64X" = "y" -a "$CONFIG_IDEDMA_PCI_EXPERIMENTAL" = "y"  ]; then
               bool '      CMD64X chipset RAID support (EXPERIMENTAL) (WIP)' CONFIG_BLK_DEV_CMD64X_RAID
@@ -71,6 +67,10 @@ else
               bool '    CY82C693 chipset support (EXPERIMENTAL)' CONFIG_BLK_DEV_CY82C693
            fi
            if [ "$CONFIG_BLK_DEV_IDEDMA_PCI" = "y" ]; then
+              bool '    ALI M15x3 chipset support' CONFIG_BLK_DEV_ALI15X3
+              if [ "$CONFIG_IDEDMA_PCI_EXPERIMENTAL" = "y" ]; then
+                 bool '    AMD Viper support (EXPERIMENTAL)' CONFIG_BLK_DEV_AMD7409
+              fi
               bool '    HPT34X chipset support' CONFIG_BLK_DEV_HPT34X
               if [ "$CONFIG_IDEDMA_PCI_EXPERIMENTAL" = "y" -a "$CONFIG_BLK_DEV_HPT34X" = "y" ]; then
                  bool '      HPT34X DMA support (EXPERIMENTAL)' CONFIG_BLK_DEV_HPT34X_DMA
index 744238f359b4f1ad28ed4ab93fa907a80c96b625..b21c6c1a9207311fe7b23899410244922a73585d 100644 (file)
@@ -2899,7 +2899,9 @@ static void DAC960_InitializeGenericDiskInfo(GenericDiskInfo_T *GenericDiskInfo)
   for (LogicalDriveNumber = 0;
        LogicalDriveNumber < Controller->LogicalDriveCount;
        LogicalDriveNumber++)
-       grok_partitions(GenericDiskInfo,LogicalDriveNumber,DAC960_MaxPartitions,
+       register_disk(GenericDiskInfo, MKDEV(GenericDiskInfo->major,
+                                      LogicalDriveNumber*DAC960_MaxPartitions),
+               DAC960_MaxPartitions, &DAC960_FileOperations,
                LogicalDriveInformation[LogicalDriveNumber].LogicalDriveSize);
 }
 
index 596c69dcc74edd95b5cb0145e8ec4b63b59dd97b..ef9e3fa7c270fcd40dbcb48275638dd76eb0b83f 100644 (file)
@@ -1653,6 +1653,14 @@ EXPORT_SYMBOL(acsi_attach_SLMs);
 int SLM_devices[8];
 #endif
 
+static struct block_device_operations acsi_fops = {
+       open:                   acsi_open,
+       release:                acsi_release,
+       ioctl:                  acsi_ioctl,
+       check_media_change:     acsi_media_change,
+       revalidate:             acsi_revalidate,
+};
+
 static void acsi_geninit(void)
 {
        int i, target, lun;
@@ -1739,8 +1747,9 @@ static void acsi_geninit(void)
                acsi_blocksizes[i] = 1024;
        blksize_size[MAJOR_NR] = acsi_blocksizes;
        for( i = 0; i < NDevices; ++i )
-               grok_partitions(&acsi_gendisk, i,
+               register_disk(&acsi_gendisk, MKDEV(MAJOR_NR,i<<4),
                                (acsi_info[i].type==HARDDISK)?1<<4:1,
+                               &acsi_fops,
                                acsi_info[i].size);
        acsi_gendisk.nr_real = NDevices;
 }
@@ -1760,14 +1769,6 @@ void acsi_attach_SLMs( int (*attach_func)( int, int ) )
 }
 #endif /* CONFIG_ATARI_SLM_MODULE */
 
-static struct block_device_operations acsi_fops = {
-       open:                   acsi_open,
-       release:                acsi_release,
-       ioctl:                  acsi_ioctl,
-       check_media_change:     acsi_media_change,
-       revalidate:             acsi_revalidate,
-};
-
 
 int acsi_init( void )
 
index 9da12d453c505380dba52b3fe822af65dfa12c5a..7cecae978234eb10497bff8c4ab9561b9de5d613 100644 (file)
@@ -313,6 +313,7 @@ static void ali15x3_tune_drive (ide_drive_t *drive, byte pio)
 
 static int ali15x3_tune_chipset (ide_drive_t *drive, byte speed)
 {
+       ide_hwif_t *hwif = HWIF(drive);
        struct pci_dev *dev     = hwif->pci_dev;
        byte unit               = (drive->select.b.unit & 0x01);
        byte tmpbyte            = 0x00;
index 1f65dc71975a45867076c70902c706132a839ec8..78269edf3a5cdb62d27a416e8d8d7ccc6ad9e12d 100644 (file)
@@ -480,8 +480,8 @@ void __init cpqarray_init(void)
 
                ida_geninit(i);
                for(j=0; j<NWD; j++)    
-                       grok_partitions(&ida_gendisk[i], j, 16,
-                                       hba[i]->drv[j].nr_blks);
+                       register_disk(&ida_gendisk[i], MKDEV(MAJOR_NR+i,j<<4),
+                                       16, &ida_fops, hba[i]->drv[j].nr_blks);
        }
        /* done ! */
        return;
index 4434aef1a730cd40078a0c8b006462d101faba9c..17e329072148449bd4ec6ddcf1180e5ee5eefab6 100644 (file)
@@ -4164,6 +4164,16 @@ int __init floppy_init(void)
                blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
                unregister_blkdev(MAJOR_NR,"fd");               
        }
+       
+       for (drive = 0; drive < N_DRIVE; drive++) {
+               if (!(allowed_drive_mask & (1 << drive)))
+                       continue;
+               if (fdc_state[FDC(drive)].version == FDC_NONE)
+                       continue;
+               for (i = 0; i<NUMBER(floppy_type); i++)
+                       register_disk(NULL, MKDEV(MAJOR_NR,TOMINOR(drive)+i*4),
+                                       1, &floppy_fops, 0);
+       }
        return have_no_fdc;
 }
 
index 7277e0fc23e913d6c320a981837117d14c0fcf7f..05a17a0c1907932e55f7f8937b5b00ea5e3393ab 100644 (file)
@@ -686,6 +686,12 @@ static void hd_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        sti();
 }
 
+static struct block_device_operations hd_fops = {
+       open:           hd_open,
+       release:        hd_release,
+       ioctl:          hd_ioctl,
+};
+
 /*
  * This is the hard disk IRQ description. The SA_INTERRUPT in sa_flags
  * means we run the IRQ-handler with interrupts disabled:  this is bad for
@@ -787,16 +793,11 @@ static void hd_geninit(void)
        hd_gendisk.nr_real = NR_HD;
 
        for(drive=0; drive < NR_HD; drive++)
-               grok_partitions(&hd_gendisk, drive, 1<<6, hd_info[drive].head *
-                       hd_info[drive].sect * hd_info[drive].cyl);
+               register_disk(&hd_gendisk, MKDEV(MAJOR_NR,drive<<6), 1<<6,
+                       &hd_fops, hd_info[drive].head * hd_info[drive].sect *
+                       hd_info[drive].cyl);
 }
 
-static struct block_device_operations hd_fops = {
-       open:           hd_open,
-       release:        hd_release,
-       ioctl:          hd_ioctl,
-};
-
 int __init hd_init(void)
 {
        if (register_blkdev(MAJOR_NR,"hd",&hd_fops)) {
index f7cfed3998b0554ef86650ff3a5f8bdc0a3f767c..873f57cc9147f39294e981e1436936f662995509 100644 (file)
@@ -547,6 +547,7 @@ unsigned long current_capacity (ide_drive_t *drive)
        return 0;
 }
 
+extern struct block_device_operations ide_fops[];
 /*
  * ide_geninit() is called exactly *once* for each interface.
  */
@@ -555,16 +556,19 @@ void ide_geninit (ide_hwif_t *hwif)
        unsigned int unit;
        struct gendisk *gd = hwif->gd;
 
-       for (unit = 0; unit < gd->nr_real; ++unit) {
+       for (unit = 0; unit < MAX_DRIVES; ++unit) {
                ide_drive_t *drive = &hwif->drives[unit];
 
-               grok_partitions(gd,unit,
+               if (!drive->present)
+                       continue;
+               if (drive->media!=ide_disk && drive->media!=ide_floppy)
+                       continue;
+               register_disk(gd,MKDEV(hwif->major,unit<<PARTN_BITS),
 #ifdef CONFIG_BLK_DEV_ISAPNP
-                       (drive->forced_geom && drive->noprobe) ||
+                       (drive->forced_geom && drive->noprobe) ? 1 :
 #endif /* CONFIG_BLK_DEV_ISAPNP */
-                       (drive->media != ide_disk &&
-                        drive->media != ide_floppy) ? 1 : 1<<PARTN_BITS,
-                               current_capacity(drive));
+                       1<<PARTN_BITS, ide_fops,
+                       current_capacity(drive));
        }
 }
 
index bb2a21bd8787fb08d6d90f0e0c5e17c231cd6306..fc6024fdc17e73d80ef4918227150470d8e640e6 100644 (file)
@@ -759,6 +759,8 @@ int __init loop_init(void)
        memset(loop_blksizes, 0, max_loop * sizeof(int));
        blk_size[MAJOR_NR] = loop_sizes;
        blksize_size[MAJOR_NR] = loop_blksizes;
+       for (i=0; i < max_loop; i++)
+               register_disk(NULL, MKDEV(MAJOR_NR,i), 1, &lo_fops, 0);
 
        return 0;
 }
index 9a1a58e882ffdb4b071a537cbeee81c1706ff712..b5b170069f24d34455995515709809d957acec16 100644 (file)
@@ -916,7 +916,7 @@ static void md_geninit (void)
     md_blocksizes[i] = 1024;
     md_maxreadahead[i] = MD_DEFAULT_DISK_READAHEAD;
     md_dev[i].pers=NULL;
-    grok_partitions(&md_gendisk, i, 1, 0);
+    register_disk(&md_gendisk, MKDEV(MAJOR_NR,i), 1, &md_fops, 0);
   }
 
 #ifdef CONFIG_PROC_FS
index d854e0e1bb8d361185103f617bda4d8d3c52b3a4..0efcce8ed4433b745ab6b465ea35b43ca8518f60 100644 (file)
@@ -489,6 +489,8 @@ int nbd_init(void)
                nbd_blksize_bits[i] = 10;
                nbd_bytesizes[i] = 0x7ffffc00; /* 2GB */
                nbd_sizes[i] = nbd_bytesizes[i] >> nbd_blksize_bits[i];
+               register_disk(NULL, MKDEV(MAJOR_NR,i), 1, &nbd_fops,
+                               nbd_bytesizes[i]>>9);
        }
        return 0;
 }
index 960d7c36919988410f739c6e2b81d7c9bf83f2f2..577d1354cc291fceb8b928779d4fb3146e93fc04 100644 (file)
@@ -263,7 +263,6 @@ void pd_setup(char * str, int * ints);
 #ifdef MODULE
 void cleanup_module( void );
 #endif
-static void pd_geninit(void);
 static int pd_open(struct inode *inode, struct file *file);
 static void do_pd_request(request_queue_t * q);
 static int pd_ioctl(struct inode *inode,struct file *file,
@@ -406,22 +405,18 @@ int pd_init (void)
 
        printk("%s: %s version %s, major %d, cluster %d, nice %d\n",
                name,name,PD_VERSION,major,cluster,nice);
-       pd_geninit();
-       
-        return 0;
-}
-
-static void pd_geninit (void)
-{
        pd_init_units();
        pd_valid = 0;
        pd_gendisk.nr_real = pd_detect();
        pd_valid = 1;
 
 #ifdef MODULE
-        if (!pd_gendisk.nr_real) cleanup_module();
+        if (!pd_gendisk.nr_real) {
+               cleanup_module();
+               return -1;
+       }
 #endif
-
+        return 0;
 }
 
 static int pd_open (struct inode *inode, struct file *file)
@@ -589,13 +584,7 @@ int     init_module(void)
          paride_init();
        } 
 #endif
-
-        err = pd_init();
-        if (err) return err;
-
-        if (!pd_gendisk.nr_real)  return -1;
-
-        return 0;
+        return pd_init();
 }
 
 void    cleanup_module(void)
@@ -833,7 +822,6 @@ static int pd_detect( void )
                     PI_PD,verbose,PD.name)) {
                if (pd_probe_drive(unit)) {
                        PD.present = 1;
-                       grok_partitions(&pd_gendisk,unit,PD_PARTNS,PD.capacity);
                        k = 1;
                } else pi_release(PI);
            }
@@ -844,10 +832,13 @@ static int pd_detect( void )
                        PI_PD,verbose,PD.name)) {
                 if (pd_probe_drive(unit)) {
                         PD.present = 1;
-                       grok_partitions(&pd_gendisk,unit,PD_PARTNS,PD.capacity);
                         k = unit+1;
                 } else pi_release(PI);
             }
+       for (unit=0;unit<PD_UNITS;unit++)
+               register_disk(&pd_gendisk,MKDEV(MAJOR_NR,unit<<PD_BITS),
+                               PD_PARTNS,&pd_fops,
+                               PD.present?PD.capacity:0);
 
 /* We lie about the number of drives found, as the generic partition
    scanner assumes that the drives are numbered sequentially from 0.
index ffb3f95126ed01c3c7518185519e240dfceadb51..d658a0369d360bcc1d77dda277bf5b8b772e4a09 100644 (file)
@@ -360,6 +360,8 @@ int pf_init (void)      /* preliminary initialisation */
         
        for (i=0;i<PF_UNITS;i++) pf_blocksizes[i] = 1024;
        blksize_size[MAJOR_NR] = pf_blocksizes;
+       for (i=0;i<PF_UNITS;i++)
+               register_disk(NULL, MKDEV(MAJOR_NR, i), 1, &pf_fops, 0);
 
         return 0;
 }
index 3979713e67174b81d372fd5a685fbe6ceef78e61..9f68ebbfc492983817e764c5abf3e08b3d9ad3e3 100644 (file)
@@ -420,13 +420,14 @@ static void __init ps2esdi_geninit(void)
        blksize_size[MAJOR_NR] = ps2esdi_blocksizes;
 
        for (i = 0; i < ps2esdi_drives; i++) {
-               grok_partitions(&ps2esdi_gendisk,i,1<<6,ps2esdi_info[i].head *
-                                   ps2esdi_info[i].sect * ps2esdi_info[i].cyl);
+               register_disk(&ps2esdi_gendisk,MKDEV(MAJOR_NR,i<<6),1<<6,
+                               &ps2esdi_fops,
+                               ps2esdi_info[i].head * ps2esdi_info[i].sect *
+                               ps2esdi_info[i].cyl);
                ps2esdi_valid[i] = 1;
        }
 }
 
-
 static void __init ps2esdi_get_device_cfg(void)
 {
        u_short cmd_blk[TYPE_0_CMD_BLK_LENGTH];
index 7d582e9e3df87619de04c48ac64cf162c6d25a43..f3803b4b3eb8b5afe49289f619276b6a339797a2 100644 (file)
@@ -429,6 +429,15 @@ int __init rd_init (void)
        blksize_size[MAJOR_NR] = rd_blocksizes;         /* Avoid set_blocksize() check */
        blk_size[MAJOR_NR] = rd_kbsize;                 /* Size of the RAM disk in kB  */
 
+       for (i = 0; i < NUM_RAMDISKS; i++)
+               register_disk(NULL, MKDEV(MAJOR_NR,i), 1, &fd_fops, rd_size<<1);
+
+#ifdef CONFIG_BLK_DEV_INITRD
+       /* We ought to separate initrd operations here */
+       register_disk(NULL, MKDEV(MAJOR_NR,INITRD_MINOR), 1, &fd_fops, rd_size<<1);
+#endif
+
+               /* rd_size is given in kB */
        printk("RAMDISK driver initialized: "
               "%d RAM disks of %dK size %d blocksize\n",
               NUM_RAMDISKS, rd_size, rd_blocksize);
index 3ff3adf49d5b6883d386432dfe1bc2236629433e..b4c52d6a2e690757e1bff1c918d545b3c7c8fd85 100644 (file)
@@ -248,8 +248,9 @@ static void __init xd_geninit (void)
 
        for (i = 0; i < xd_drives; i++) {
                xd_valid[i] = 1;
-               grok_partitions(&xd_gendisk, i, 1<<6, xd_info[i].heads *
-                               xd_info[i].cylinders * xd_info[i].sectors);
+               register_disk(&xd_gendisk, MKDEV(MAJOR_NR,i<<6), 1<<6, &xd_fops,
+                               xd_info[i].heads * xd_info[i].cylinders *
+                               xd_info[i].sectors);
        }
 
        xd_gendisk.nr_real = xd_drives;
index 5f7cfb21ff0c05b823462768cbb5f2ddd6e99309..ef9cbd3983ebcf648a20fc851b4c1083c8b7e0ec 100644 (file)
@@ -1796,6 +1796,7 @@ int __init aztcd_init(void)
        blksize_size[MAJOR_NR] = aztcd_blocksizes;
 #endif
        read_ahead[MAJOR_NR] = 4;
+       register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &azt_fops, 0);
 
         if ((azt_port==0x1f0)||(azt_port==0x170))  
           request_region(azt_port, 8, "aztcd");  /*IDE-interface*/
index f3df74f918492efb5a05d900f833178346ca0cdf..f7d15edadbb4fc647f32cb6b12d362b5095ffc6c 100644 (file)
@@ -353,6 +353,8 @@ int register_cdrom(struct cdrom_device_info *cdi)
        cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
        cdi->next = topCdromPtr;        
        topCdromPtr = cdi;
+       /*FIXME:as soon as we'll switch to real thing, pass device number here*/
+       register_disk(NULL, cdi->dev, 1, &cdrom_fops, 0);
        return 0;
 }
 #undef ENSURE
@@ -380,6 +382,7 @@ int unregister_cdrom(struct cdrom_device_info *unreg)
                prev->next = cdi->next;
        else
                topCdromPtr = cdi->next;
+/*     unregister_disk();      */
        cdi->ops->n_minors--;
        cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name);
        return 0;
index b24aefa16ce1a1793c0a6e0ca2c0abcb88d21152..6047df0c70877e944404855daf3d0558d292717f 100644 (file)
@@ -1082,6 +1082,7 @@ int result;
         gscdPresent = 1;
 
        request_region(gscd_port, 4, "gscd");
+       register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &gscd_fops, 0);
 
         printk (KERN_INFO "GSCD: GoldStar CD-ROM Drive found.\n" );
        return 0;
index a1f36ae23c7afe89a23d7a38714ea236f89b3d9d..b0bdc833aa036acd136ee2f05292d5e38c539eef 100644 (file)
@@ -2072,6 +2072,7 @@ int __init optcd_init(void)
        blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
        read_ahead[MAJOR_NR] = 4;
        request_region(optcd_port, 4, "optcd");
+       register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &opt_fops, 0);
 
        printk(KERN_INFO "optcd: DOLPHIN 8000 AT CDROM at 0x%x\n", optcd_port);
        return 0;
index 97107b96935994e3a6c581bdda8701e8440b89e6..f13deeac80d2e3a8923aaae57d49ae0e5497be8a 100644 (file)
@@ -1478,6 +1478,7 @@ int __init sjcd_init( void ){
   
   blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
   read_ahead[ MAJOR_NR ] = 4;
+  register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &sjcd_fops, 0);
   
   if( check_region( sjcd_base, 4 ) ){
     printk( "SJCD: Init failed, I/O port (%X) is already in use\n",
index 4e23b783f16ca56609cc7a3ad49fd16752d3529b..a9b82571e183c4451037969d6dea4b3325f924d6 100644 (file)
@@ -798,9 +798,6 @@ do_cdu535_request(request_queue_t * q)
        Byte status[2];
        Byte cmd[2];
 
-       if (!sony_inuse) {
-               cdu_open(NULL, NULL);
-       }
        while (1) {
                /*
                 * The beginning here is stolen from the hard disk driver.  I hope
@@ -1396,7 +1393,6 @@ cdu_open(struct inode *inode,
 {
        Byte status[2], cmd_buff[2];
 
-
        if (sony_inuse)
                return -EBUSY;
        if (check_drive_status() != 0)
@@ -1638,6 +1634,7 @@ sony535_init(void)
                return -EIO;
        }
        request_region(sony535_cd_base_io, 4, CDU535_HANDLE);
+       register_disk(NULL, MKDEV(MAJOR_NR,0), 1, &cdu_fops, 0);
        return 0;
 }
 
index 655f11affba0c92e16e3675a28f2cfe05e0f191e..d11de7b352780dd85aae333a7c6b547ecf560b97 100644 (file)
@@ -1,7 +1,7 @@
 #undef BLOCKMOVE
 #define        Z_WAKE
 static char rcsid[] =
-"$Revision: 2.3.2.2 $$Date: 1999/10/01 11:27:43 $";
+"$Revision: 2.3.2.4 $$Date: 2000/01/17 09:19:40 $";
 
 /*
  *  linux/drivers/char/cyclades.c
@@ -9,8 +9,9 @@ static char rcsid[] =
  * This file contains the driver for the Cyclades Cyclom-Y multiport
  * serial boards.
  *
- * Initially written by Randolph Bentson (bentson@grieg.seaslug.org).
- * Maintained by Ivan Passos (ivan@cyclades.com).
+ * Initially written by Randolph Bentson <bentson@grieg.seaslug.org>.
+ * Modified and maintained by Marcio Saito <marcio@cyclades.com>.
+ * Currently maintained by Ivan Passos <ivan@cyclades.com>.
  *
  * For Technical support and installation problems, please send e-mail
  * to support@cyclades.com.
@@ -30,10 +31,21 @@ static char rcsid[] =
  *   void cleanup_module(void);
  *
  * $Log: cyclades.c,v $
+ * Revision 2.3.2.4   2000/01/17 09:19:40 ivan
+ * Fixed SMP locking in Cyclom-Y interrupt handler.
+ *
+ * Revision 2.3.2.3   1999/12/28 12:11:39 ivan
+ * Added a new cyclades_card field called nports to allow the driver to
+ * know the exact number of ports found by the Z firmware after its load;
+ * RX buffer contention prevention logic on interrupt op mode revisited
+ * (Cyclades-Z only);
+ * Revisited printk's for Z debug;
+ * Driver now makes sure that the constant SERIAL_XMIT_SIZE is defined;
+ *
  * Revision 2.3.2.2   1999/10/01 11:27:43 ivan
- * Fixed bug in cyz_poll that would make all ports but port 0
+ * Fixed bug in cyz_poll that would make all ports but port 0 
  * unable to transmit/receive data (Cyclades-Z only);
- * Implemented logic to prevent the RX buffer from being stuck with
+ * Implemented logic to prevent the RX buffer from being stuck with data
  * due to a driver / firmware race condition in interrupt op mode
  * (Cyclades-Z only);
  * Fixed bug in block_til_ready logic that would lead to a system crash;
@@ -598,25 +610,6 @@ static char rcsid[] =
 
 #define cy_min(a,b) (((a)<(b))?(a):(b))
 
-#if 0
-/******** 
- * For the next two macros, it is assumed that the buffer size is a 
- * power of 2 
- ********/
-
-#define CHARS_IN_BUF(buf_ctrl) \
-    ((cy_readl(&buf_ctrl->rx_put) - \
-      cy_readl(&buf_ctrl->rx_get) + \
-      cy_readl(&buf_ctrl->rx_bufsize)) & \
-                 (cy_readl(&buf_ctrl->rx_bufsize) - 1))
-
-#define SPACE_IN_BUF(buf_ctrl) \
-    ((cy_readl(&buf_ctrl->tx_get) - \
-      cy_readl(&buf_ctrl->tx_put) + \
-      cy_readl(&buf_ctrl->tx_bufsize) - 1) & \
-                 (cy_readl(&buf_ctrl->tx_bufsize) - 1))
-#endif
-
 /*
  * Include section 
  */
@@ -997,10 +990,12 @@ do_softint(void *private_)
     }
 #ifdef CONFIG_CYZ_INTR
     if (test_and_clear_bit(Cy_EVENT_Z_RX_FULL, &info->event)) {
-       cyz_rx_full_timer[info->line].expires = jiffies + 1;
-       cyz_rx_full_timer[info->line].function = cyz_rx_restart;
-       cyz_rx_full_timer[info->line].data = (unsigned long)info;
-       add_timer(&cyz_rx_full_timer[info->line]);
+       if (cyz_rx_full_timer[info->line].function == NULL) {
+           cyz_rx_full_timer[info->line].expires = jiffies + 1;
+           cyz_rx_full_timer[info->line].function = cyz_rx_restart;
+           cyz_rx_full_timer[info->line].data = (unsigned long)info;
+           add_timer(&cyz_rx_full_timer[info->line]);
+       }
     }
 #endif
     if (test_and_clear_bit(Cy_EVENT_DELTA_WAKEUP, &info->event)) {
@@ -1172,7 +1167,6 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                     info->last_active = jiffies;
                     save_car = cy_readb(base_addr+(CyCAR<<index));
                     cy_writeb((u_long)base_addr+(CyCAR<<index), save_xir);
-                   spin_unlock(&cinfo->card_lock);
 
                     /* if there is nowhere to put the data, discard it */
                     if(info->tty == 0){
@@ -1301,7 +1295,6 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                         queue_task(&tty->flip.tqueue, &tq_timer);
                     }
                     /* end of service */
-                   spin_lock(&cinfo->card_lock);
                     cy_writeb((u_long)base_addr+(CyRIR<<index), (save_xir & 0x3f));
                     cy_writeb((u_long)base_addr+(CyCAR<<index), (save_car));
                    spin_unlock(&cinfo->card_lock);
@@ -1323,23 +1316,18 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                     i = channel + chip * 4 + cinfo->first_line;
                     save_car = cy_readb(base_addr+(CyCAR<<index));
                     cy_writeb((u_long)base_addr+(CyCAR<<index), save_xir);
-                   spin_unlock(&cinfo->card_lock);
 
                     /* validate the port# (as configured and open) */
                     if( (i < 0) || (NR_PORTS <= i) ){
-                       spin_lock(&cinfo->card_lock);
                         cy_writeb((u_long)base_addr+(CySRER<<index),
                              cy_readb(base_addr+(CySRER<<index)) & ~CyTxMpty);
-                       spin_unlock(&cinfo->card_lock);
                         goto txend;
                     }
                     info = &cy_port[i];
                     info->last_active = jiffies;
                     if(info->tty == 0){
-                       spin_lock(&cinfo->card_lock);
                         cy_writeb((u_long)base_addr+(CySRER<<index),
                              cy_readb(base_addr+(CySRER<<index)) & ~CyTxMpty);
-                       spin_unlock(&cinfo->card_lock);
                         goto txdone;
                     }
 
@@ -1371,27 +1359,21 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
                     while (char_count-- > 0){
                        if (!info->xmit_cnt){
-                           spin_lock(&cinfo->card_lock);
                             cy_writeb((u_long)base_addr+(CySRER<<index),
                                cy_readb(base_addr+(CySRER<<index)) & 
                                        ~CyTxMpty);
-                           spin_unlock(&cinfo->card_lock);
                            goto txdone;
                        }
                        if (info->xmit_buf == 0){
-                           spin_lock(&cinfo->card_lock);
                             cy_writeb((u_long)base_addr+(CySRER<<index),
                                cy_readb(base_addr+(CySRER<<index)) & 
                                        ~CyTxMpty);
-                           spin_unlock(&cinfo->card_lock);
                             goto txdone;
                        }
                        if (info->tty->stopped || info->tty->hw_stopped){
-                           spin_lock(&cinfo->card_lock);
                             cy_writeb((u_long)base_addr+(CySRER<<index),
                                cy_readb(base_addr+(CySRER<<index)) & 
                                        ~CyTxMpty);
-                           spin_unlock(&cinfo->card_lock);
                             goto txdone;
                        }
                         /* Because the Embedded Transmit Commands have
@@ -1433,7 +1415,6 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                     }
         txend:
                     /* end of service */
-                   spin_lock(&cinfo->card_lock);
                     cy_writeb((u_long)base_addr+(CyTIR<<index), 
                              (save_xir & 0x3f));
                     cy_writeb((u_long)base_addr+(CyCAR<<index), (save_car));
@@ -1454,7 +1435,6 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
                     mdm_change = cy_readb(base_addr+(CyMISR<<index));
                     mdm_status = cy_readb(base_addr+(CyMSVR1<<index));
-                   spin_unlock(&cinfo->card_lock);
 
                     if(info->tty == 0){/* no place for data, ignore it*/
                         ;
@@ -1489,11 +1469,9 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                                     /* cy_start isn't used
                                         because... !!! */
                                     info->tty->hw_stopped = 0;
-                                 spin_lock(&cinfo->card_lock);
                                   cy_writeb((u_long)base_addr+(CySRER<<index),
                                        cy_readb(base_addr+(CySRER<<index)) | 
                                        CyTxMpty);
-                                 spin_unlock(&cinfo->card_lock);
                                     cy_sched_event(info,
                                        Cy_EVENT_WRITE_WAKEUP);
                                 }
@@ -1502,11 +1480,9 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                                     /* cy_stop isn't used
                                         because ... !!! */
                                     info->tty->hw_stopped = 1;
-                                 spin_lock(&cinfo->card_lock);
                                   cy_writeb((u_long)base_addr+(CySRER<<index),
                                        cy_readb(base_addr+(CySRER<<index)) & 
                                        ~CyTxMpty);
-                                 spin_unlock(&cinfo->card_lock);
                                 }
                             }
                         }
@@ -1516,7 +1492,6 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                         }
                     }
                     /* end of service */
-                   spin_lock(&cinfo->card_lock);
                     cy_writeb((u_long)base_addr+(CyMIR<<index), 
                              (save_xir & 0x3f));
                     cy_writeb((u_long)base_addr+(CyCAR<<index), save_car);
@@ -1538,7 +1513,6 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 /******** Start of block of Cyclades-Z specific code *********/
 /***********************************************************/
 
-
 static int
 cyz_fetch_msg( struct cyclades_card *cinfo,
            uclong *channel, ucchar *cmd, uclong *param)
@@ -1592,7 +1566,7 @@ cyz_issue_cmd( struct cyclades_card *cinfo,
                                (cinfo->ctl_addr))->pci_doorbell);
     while( (cy_readl(pci_doorbell) & 0xff) != 0){
         if (index++ == 1000){
-            return(-1);
+           return((int)(cy_readl(pci_doorbell) & 0xff));
         }
        udelay(50L);
     }
@@ -1604,7 +1578,8 @@ cyz_issue_cmd( struct cyclades_card *cinfo,
 } /* cyz_issue_cmd */
 
 static void
-cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
+cyz_handle_rx(struct cyclades_port *info, volatile struct CH_CTRL *ch_ctrl,
+             volatile struct BUF_CTRL *buf_ctrl)
 {
   struct cyclades_card *cinfo = &cy_card[info->card];
   struct tty_struct *tty = info->tty;
@@ -1614,14 +1589,12 @@ cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
 #else
   char data;
 #endif
-  volatile uclong rx_put, rx_get, rx_bufsize;
-
-/* Removed due to compilation problems in Alpha systems */
-//    if ((char_count = CHARS_IN_BUF(buf_ctrl))){
+  volatile uclong rx_put, rx_get, new_rx_get, rx_bufsize, rx_bufaddr;
 
-    rx_get = cy_readl(&buf_ctrl->rx_get);
+    rx_get = new_rx_get = cy_readl(&buf_ctrl->rx_get);
     rx_put = cy_readl(&buf_ctrl->rx_put);
     rx_bufsize = cy_readl(&buf_ctrl->rx_bufsize);
+    rx_bufaddr = cy_readl(&buf_ctrl->rx_bufaddr);
     if (rx_put >= rx_get)
        char_count = rx_put - rx_get;
     else
@@ -1640,7 +1613,7 @@ cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
 #endif
        if(tty == 0){
            /* flush received characters */
-           rx_get = (rx_get + char_count) & (rx_bufsize - 1);
+           new_rx_get = (new_rx_get + char_count) & (rx_bufsize - 1);
            info->rflush_count++;
        }else{
 #ifdef BLOCKMOVE
@@ -1648,19 +1621,18 @@ cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
               for performance, but because of buffer boundaries, there
               may be several steps to the operation */
            while(0 < (small_count = 
-                      cy_min((rx_bufsize - rx_get),
+                      cy_min((rx_bufsize - new_rx_get),
                       cy_min((TTY_FLIPBUF_SIZE - tty->flip.count), char_count))
                 )) {
                memcpy_fromio(tty->flip.char_buf_ptr,
                              (char *)(cinfo->base_addr
-                                      + cy_readl(&buf_ctrl->rx_bufaddr)
-                                      + rx_get),
+                                      + rx_bufaddr + new_rx_get),
                              small_count);
 
                tty->flip.char_buf_ptr += small_count;
                memset(tty->flip.flag_buf_ptr, TTY_NORMAL, small_count);
                tty->flip.flag_buf_ptr += small_count;
-               rx_get = (rx_get + small_count) & (rx_bufsize - 1);
+               new_rx_get = (new_rx_get + small_count) & (rx_bufsize - 1);
                char_count -= small_count;
                info->icount.rx += small_count;
                info->idle_stats.recv_bytes += small_count;
@@ -1669,31 +1641,40 @@ cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
 #else
            while(char_count--){
                if (tty->flip.count >= TTY_FLIPBUF_SIZE){
-#ifdef CONFIG_CYZ_INTR
-                   cy_sched_event(info, Cy_EVENT_Z_RX_FULL);
-#endif
                    break;
                }
-               data = cy_readb(cinfo->base_addr +
-                       cy_readl(&buf_ctrl->rx_bufaddr) + rx_get);
-               rx_get = (rx_get + 1) & (rx_bufsize - 1);
+               data = cy_readb(cinfo->base_addr + rx_bufaddr + new_rx_get);
+               new_rx_get = (new_rx_get + 1) & (rx_bufsize - 1);
                tty->flip.count++;
                *tty->flip.flag_buf_ptr++ = TTY_NORMAL;
                *tty->flip.char_buf_ptr++ = data;
                info->idle_stats.recv_bytes++;
                info->icount.rx++;
            }
+#endif
+#ifdef CONFIG_CYZ_INTR
+           /* Recalculate the number of chars in the RX buffer and issue
+              a cmd in case it's higher than the RX high water mark */
+           rx_put = cy_readl(&buf_ctrl->rx_put);
+           if (rx_put >= rx_get)
+               char_count = rx_put - rx_get;
+           else
+               char_count = rx_put - rx_get + rx_bufsize;
+           if(char_count >= cy_readl(&buf_ctrl->rx_threshold)) {
+               cy_sched_event(info, Cy_EVENT_Z_RX_FULL);
+           }
 #endif
            info->idle_stats.recv_idle = jiffies;
            queue_task(&tty->flip.tqueue, &tq_timer);
        }
        /* Update rx_get */
-       cy_writel(&buf_ctrl->rx_get, rx_get);
+       cy_writel(&buf_ctrl->rx_get, new_rx_get);
     }
 }
 
 static void
-cyz_handle_tx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
+cyz_handle_tx(struct cyclades_port *info, volatile struct CH_CTRL *ch_ctrl,
+             volatile struct BUF_CTRL *buf_ctrl)
 {
   struct cyclades_card *cinfo = &cy_card[info->card];
   struct tty_struct *tty = info->tty;
@@ -1702,14 +1683,15 @@ cyz_handle_tx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
 #ifdef BLOCKMOVE
   int small_count;
 #endif
-  volatile uclong tx_put, tx_get, tx_bufsize;
+  volatile uclong tx_put, tx_get, tx_bufsize, tx_bufaddr;
 
-/* Removed due to compilation problems in Alpha systems */
-//    if ((char_count = SPACE_IN_BUF(buf_ctrl))){
+    if (info->xmit_cnt <= 0)   /* Nothing to transmit */
+       return;
 
     tx_get = cy_readl(&buf_ctrl->tx_get);
     tx_put = cy_readl(&buf_ctrl->tx_put);
     tx_bufsize = cy_readl(&buf_ctrl->tx_bufsize);
+    tx_bufaddr = cy_readl(&buf_ctrl->tx_bufaddr);
     if (tx_put >= tx_get)
        char_count = tx_get - tx_put - 1 + tx_bufsize;
     else
@@ -1724,8 +1706,7 @@ cyz_handle_tx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
        if(info->x_char) { /* send special char */
            data = info->x_char;
 
-           cy_writeb((cinfo->base_addr + 
-               cy_readl(&buf_ctrl->tx_bufaddr) + tx_put), data);
+           cy_writeb((cinfo->base_addr + tx_bufaddr + tx_put), data);
            tx_put = (tx_put + 1) & (tx_bufsize - 1);
            info->x_char = 0;
            char_count--;
@@ -1739,8 +1720,7 @@ cyz_handle_tx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
                   cy_min ((SERIAL_XMIT_SIZE - info->xmit_tail),
                        cy_min(info->xmit_cnt, char_count))))){
 
-           memcpy_toio((char *)(cinfo->base_addr
-                                + cy_readl(&buf_ctrl->tx_bufaddr) + tx_put),
+           memcpy_toio((char *)(cinfo->base_addr + tx_bufaddr + tx_put),
                        &info->xmit_buf[info->xmit_tail],
                        small_count);
 
@@ -1759,8 +1739,7 @@ cyz_handle_tx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
            info->xmit_cnt--;
            info->xmit_tail = (info->xmit_tail + 1) & (SERIAL_XMIT_SIZE - 1);
 
-           cy_writeb(cinfo->base_addr + 
-               cy_readl(&buf_ctrl->tx_bufaddr) + tx_put, data);
+           cy_writeb(cinfo->base_addr + tx_bufaddr + tx_put, data);
            tx_put = (tx_put + 1) & (tx_bufsize - 1);
            char_count--;
            info->icount.tx++;
@@ -1801,6 +1780,11 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
     fw_ver = cy_readl(&board_ctrl->fw_version);
     hw_ver = cy_readl(&((struct RUNTIME_9060 *)(cinfo->ctl_addr))->mail_box_0);
 
+#ifdef CONFIG_CYZ_INTR
+    if (!cinfo->nports)
+       cinfo->nports = (int) cy_readl(&board_ctrl->n_channel);
+#endif
+
     while(cyz_fetch_msg(cinfo, &channel, &cmd, &param) == 1) {
        special_count = 0;
        delta_count = 0;
@@ -1873,7 +1857,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
                printk("cyz_interrupt: rcvd intr, card %d, port %ld\n\r", 
                        info->card, channel);
 #endif
-               cyz_handle_rx(info, buf_ctrl);
+               cyz_handle_rx(info, ch_ctrl, buf_ctrl);
                break;
            case C_CM_TXBEMPTY:
            case C_CM_TXLOWWM:
@@ -1883,7 +1867,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
                printk("cyz_interrupt: xmit intr, card %d, port %ld\n\r", 
                        info->card, channel);
 #endif
-               cyz_handle_tx(info, buf_ctrl);
+               cyz_handle_tx(info, ch_ctrl, buf_ctrl);
                break;
 #endif /* CONFIG_CYZ_INTR */
            case C_CM_FATAL:
@@ -1932,12 +1916,16 @@ cyz_rx_restart(unsigned long arg)
     int retval;
     int card = info->card;
     uclong channel = (info->line) - (cy_card[card].first_line);
+    unsigned long flags;
 
-    cyz_rx_full_timer[info->card].expires = jiffies + HZ;
+    CY_LOCK(info, flags);
     retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_INTBACK2, 0L);
     if (retval != 0){
-       printk("cyc:cyz_rx_restart retval was %x\n", retval);
+       printk("cyc:cyz_rx_restart retval on ttyC%d was %x\n", 
+              info->line, retval);
     }
+    cyz_rx_full_timer[info->line].function = NULL;
+    CY_UNLOCK(info, flags);
 }
 
 #else /* CONFIG_CYZ_INTR */
@@ -1962,27 +1950,28 @@ cyz_poll(unsigned long arg)
        if (!IS_CYC_Z(*cinfo)) continue;
        if (!ISZLOADED(*cinfo)) continue;
 
+       firm_id = (struct FIRM_ID *)(cinfo->base_addr + ID_ADDRESS);
+       zfw_ctrl = (struct ZFW_CTRL *)
+                  (cinfo->base_addr + cy_readl(&firm_id->zfwctrl_addr));
+       board_ctrl = &(zfw_ctrl->board_ctrl);
+
        /* Skip first polling cycle to avoid racing conditions with the FW */
        if (!cinfo->intr_enabled) {
+           cinfo->nports = (int) cy_readl(&board_ctrl->n_channel);
            cinfo->intr_enabled = 1;
            continue;
        }
 
-       firm_id = (struct FIRM_ID *)(cinfo->base_addr + ID_ADDRESS);
-       zfw_ctrl = (struct ZFW_CTRL *)
-                  (cinfo->base_addr + cy_readl(&firm_id->zfwctrl_addr));
-       board_ctrl = &(zfw_ctrl->board_ctrl);
-
        cyz_handle_cmd(cinfo);
 
-       for (port = 0; port < cy_readl(&board_ctrl->n_channel); port++){
+       for (port = 0 ; port < cinfo->nports ; port++) {
            info = &cy_port[ port + cinfo->first_line ];
             tty = info->tty;
            ch_ctrl = &(zfw_ctrl->ch_ctrl[port]);
            buf_ctrl = &(zfw_ctrl->buf_ctrl[port]);
 
-           cyz_handle_rx(info, buf_ctrl);
-           cyz_handle_tx(info, buf_ctrl);
+           cyz_handle_rx(info, ch_ctrl, buf_ctrl);
+           cyz_handle_tx(info, ch_ctrl, buf_ctrl);
        }
        /* poll every 'cyz_polling_cycle' period */
        cyz_timerlist.expires = jiffies + cyz_polling_cycle;
@@ -2141,13 +2130,15 @@ startup(struct cyclades_port * info)
 
        retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_IOCTL, 0L);
        if (retval != 0){
-           printk("cyc:startup(1) retval was %x\n", retval);
+           printk("cyc:startup(1) retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
 
        /* Flush RX buffers before raising DTR and RTS */
        retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_FLUSH_RX, 0L);
        if (retval != 0){
-           printk("cyc:startup(2) retval was %x\n", retval);
+           printk("cyc:startup(2) retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
 
        /* set timeout !!! */
@@ -2157,7 +2148,8 @@ startup(struct cyclades_port * info)
        retval = cyz_issue_cmd(&cy_card[info->card],
            channel, C_CM_IOCTLM, 0L);
        if (retval != 0){
-           printk("cyc:startup(3) retval was %x\n", retval);
+           printk("cyc:startup(3) retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
 #ifdef CY_DEBUG_DTR
            printk("cyc:startup raising Z DTR\n");
@@ -2219,7 +2211,8 @@ start_xmit( struct cyclades_port *info )
        CY_LOCK(info, flags);
            retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_INTBACK, 0L);
            if (retval != 0){
-               printk("cyc:start_xmit retval was %x\n", retval);
+               printk("cyc:start_xmit retval on ttyC%d was %x\n",
+                      info->line, retval);
            }
        CY_UNLOCK(info, flags);
 #else /* CONFIG_CYZ_INTR */
@@ -2329,7 +2322,8 @@ shutdown(struct cyclades_port * info)
                retval = cyz_issue_cmd(&cy_card[info->card],
                        channel, C_CM_IOCTLM, 0L);
                if (retval != 0){
-                   printk("cyc:shutdown retval was %x\n", retval);
+                   printk("cyc:shutdown retval on ttyC%d was %x\n",
+                          info->line, retval);
                }
 #ifdef CY_DEBUG_DTR
                printk("cyc:shutdown dropping Z DTR\n");
@@ -2513,16 +2507,21 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
        ch_ctrl = zfw_ctrl->ch_ctrl;
 
        while (1) {
-           cy_writel(&ch_ctrl[channel].rs_control,
-               cy_readl(&ch_ctrl[channel].rs_control) | C_RS_RTS | C_RS_DTR);
-           retval = cyz_issue_cmd(&cy_card[info->card],
-                   channel, C_CM_IOCTLM, 0L);
-           if (retval != 0){
-               printk("cyc:block_til_ready retval was %x\n", retval);
-           }
+           if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
+               (tty->termios->c_cflag & CBAUD)){
+               cy_writel(&ch_ctrl[channel].rs_control,
+                       cy_readl(&ch_ctrl[channel].rs_control) |
+                       (C_RS_RTS | C_RS_DTR));
+               retval = cyz_issue_cmd(&cy_card[info->card],
+                                      channel, C_CM_IOCTLM, 0L);
+               if (retval != 0){
+                   printk("cyc:block_til_ready retval on ttyC%d was %x\n",
+                          info->line, retval);
+               }
 #ifdef CY_DEBUG_DTR
-                   printk("cyc:block_til_ready raising Z DTR\n");
+               printk("cyc:block_til_ready raising Z DTR\n");
 #endif
+           }
 
            set_current_state(TASK_INTERRUPTIBLE);
            if (tty_hung_up_p(filp)
@@ -2894,7 +2893,8 @@ cy_close(struct tty_struct *tty, struct file *filp)
            retval = cyz_issue_cmd(&cy_card[info->card], channel, 
                                   C_CM_IOCTLW, 0L);
            if (retval != 0){
-               printk("cyc:cy_close retval was %x\n", retval);
+               printk("cyc:cy_close retval on ttyC%d was %x\n",
+                      info->line, retval);
            }
            CY_UNLOCK(info, flags);
            interruptible_sleep_on(&info->shutdown_wait);
@@ -3501,8 +3501,8 @@ set_line_char(struct cyclades_port * info)
 
        retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_IOCTL, 0L);
        if (retval != 0){
-           printk("cyc:set_line_char retval at %d was %x\n",
-               __LINE__, retval);
+           printk("cyc:set_line_char retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
 
        /* CD sensitivity */
@@ -3528,8 +3528,8 @@ set_line_char(struct cyclades_port * info)
 
        retval = cyz_issue_cmd( &cy_card[card], channel, C_CM_IOCTLM, 0L);
        if (retval != 0){
-           printk("cyc:set_line_char retval at %d was %x\n",
-               __LINE__, retval);
+           printk("cyc:set_line_char(2) retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
 
        if (info->tty){
@@ -3905,8 +3905,8 @@ set_modem_info(struct cyclades_port * info, unsigned int cmd,
         retval = cyz_issue_cmd(&cy_card[info->card],
                                    channel, C_CM_IOCTLM,0L);
        if (retval != 0){
-           printk("cyc:set_modem_info retval at %d was %x\n",
-               __LINE__, retval);
+           printk("cyc:set_modem_info retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
        CY_UNLOCK(info, flags);
     }
@@ -3957,16 +3957,16 @@ cy_break(struct tty_struct *tty, int break_state)
                (info->line) - (cy_card[info->card].first_line),
                C_CM_SET_BREAK, 0L);
            if (retval != 0) {
-               printk("cyc:cy_break (set) retval at %d was %x\n",
-                       __LINE__, retval);
+               printk("cyc:cy_break (set) retval on ttyC%d was %x\n",
+                      info->line, retval);
            }
        } else {
            retval = cyz_issue_cmd(&cy_card[info->card],
                (info->line) - (cy_card[info->card].first_line),
                C_CM_CLR_BREAK, 0L);
            if (retval != 0) {
-               printk("cyc:cy_break (clr) retval at %d was %x\n",
-                       __LINE__, retval);
+               printk("cyc:cy_break (clr) retval on ttyC%d was %x\n",
+                      info->line, retval);
            }
        }
     }
@@ -4579,7 +4579,8 @@ cy_flush_buffer(struct tty_struct *tty)
        CY_LOCK(info, flags);
        retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_FLUSH_TX, 0L);
        if (retval != 0) {
-           printk("cyc: flush_buffer retval was %x\n", retval);
+           printk("cyc: flush_buffer retval on ttyC%d was %x\n",
+                  info->line, retval);
        }
        CY_UNLOCK(info, flags);
     }
@@ -5474,6 +5475,8 @@ cy_init(void)
                             cy_card[board].ctl_addr)->mail_box_0);
                nports = (mailbox == ZE_V1) ? ZE_V1_NPORTS : 8;
                cinfo->intr_enabled = 0;
+               cinfo->nports = 0; /* Will be correctly set later, after 
+                                     Z FW is loaded */
                spin_lock_init(&cinfo->card_lock);
                 for (port = cinfo->first_line ;
                      port < cinfo->first_line + nports;
@@ -5510,9 +5513,6 @@ cy_init(void)
                     info->x_char = 0;
                     info->event = 0;
                     info->count = 0;
-#ifdef CY_DEBUG_COUNT
-//        printk("cyc:cy_init(1) setting Z count to 0\n");
-#endif
                     info->blocked_open = 0;
                     info->default_threshold = 0;
                     info->default_timeout = 0;
@@ -5535,13 +5535,17 @@ cy_init(void)
                     info->jiffies[1] = 0;
                     info->jiffies[2] = 0;
                     info->rflush_count = 0;
+#ifdef CONFIG_CYZ_INTR
+                   cyz_rx_full_timer[port].function = NULL;
+#endif
                 }
                 continue;
             }else{ /* Cyclom-Y of some kind*/
                 index = cinfo->bus_index;
                spin_lock_init(&cinfo->card_lock);
+               cinfo->nports = CyPORTS_PER_CHIP * cinfo->num_chips;
                 for (port = cinfo->first_line ;
-                     port < cinfo->first_line + 4*cinfo->num_chips ;
+                     port < cinfo->first_line + cinfo->nports ;
                      port++)
                 {
                     info = &cy_port[port];
@@ -5586,9 +5590,6 @@ cy_init(void)
                     info->x_char = 0;
                     info->event = 0;
                     info->count = 0;
-#ifdef CY_DEBUG_COUNT
-//        printk("cyc:cy_init(2) setting Y count to 0\n");
-#endif
                     info->blocked_open = 0;
                     info->default_threshold = 0;
                     info->default_timeout = 0;
index 484d537649cf4f08d4b20911741667b52ad9637d..766fdd1d008882b99b82e6b261d2cb69e4a1f92e 100644 (file)
@@ -2,8 +2,7 @@
 # PCMCIA character device configuration
 #
 
-if [ "$CONFIG_SERIAL" = "n" -o "$CONFIG_PCMCIA" = "n" -o \
-     "$CONFIG_HOTPLUG" = "n" ]; then
+if [ "$CONFIG_SERIAL" = "n" ]; then
    define_bool CONFIG_PCMCIA_SERIAL n
 else
    if [ "$CONFIG_SERIAL" = "m" -o "$CONFIG_PCMCIA" = "m" ]; then
@@ -22,10 +21,10 @@ if [ "$CONFIG_PCMCIA_SERIAL" != "n" ]; then
       dep_tristate 'CardBus serial device support' CONFIG_PCMCIA_SERIAL_CB $CONFIG_PCMCIA_SERIAL
    fi
 
-   endmenu
-fi
+   if [ "$CONFIG_PCMCIA_SERIAL_CS" = "y" -o \
+        "$CONFIG_PCMCIA_SERIAL_CB" = "y" ]; then
+      define_bool CONFIG_PCMCIA_CHRDEV y
+   fi
 
-if [ "$CONFIG_PCMCIA_SERIAL_CS" = "y" -o \
-     "$CONFIG_PCMCIA_SERIAL_CB" = "y" ]; then
-   define_bool CONFIG_PCMCIA_CHRDEV y
+   endmenu
 fi
index 8a2dede8552ae9c0ab258a50562fe64d1559fa39..b0d8b02a883563725c9b48ac9beb9cba49f36d68 100644 (file)
@@ -2,7 +2,7 @@
 
     A driver for CardBus serial devices
 
-    serial_cb.c 1.14 1999/11/11 02:18:08
+    serial_cb.c 1.15 1999/11/24 02:52:06
 
     Copyright 1998, 1999 by Donald Becker and David Hinds
     
@@ -39,7 +39,7 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"serial_cb.c 1.14 1999/11/11 02:18:08 (David Hinds)";
+"serial_cb.c 1.15 1999/11/24 02:52:06 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -56,8 +56,9 @@ static void device_setup(u_char bus, u_char devfn, u_int ioaddr)
 
     pcibios_read_config_word(bus, devfn, PCI_SUBSYSTEM_VENDOR_ID, &a);
     pcibios_read_config_word(bus, devfn, PCI_SUBSYSTEM_ID, &b);
-    if ((a == 0x13a2) && (b == 0x8007)) {
-       /* Ositech Jack of Spades */
+    if (((a == 0x13a2) && (b == 0x8007)) ||
+       ((a == 0x1420) && (b == 0x8003))) {
+       /* Ositech, Psion 83c175-based cards */
        DEBUG(0, "  83c175 NVCTL_m = 0x%4.4x.\n", inl(ioaddr+0x80));
        outl(0x4C00, ioaddr + 0x80);
        outl(0x4C80, ioaddr + 0x80);
index 38345b1b533132bf9c798057683cf4c919507e6b..a59a877bb94df3482f5a49d6fb05090d7195388c 100644 (file)
@@ -2,7 +2,7 @@
 
     A driver for PCMCIA serial devices
 
-    serial_cs.c 1.114 1999/11/11 00:54:46
+    serial_cs.c 1.117 1999/12/11 03:59:18
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -58,7 +58,7 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"serial_cs.c 1.114 1999/11/11 00:54:46 (David Hinds)";
+"serial_cs.c 1.117 1999/12/11 03:59:18 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -100,6 +100,7 @@ static multi_id_t multi_id[] = {
 #define MULTI_COUNT (sizeof(multi_id)/sizeof(multi_id_t))
 
 typedef struct serial_info_t {
+    dev_link_t link;
     int                ndev;
     int                multi;
     int                slave;
@@ -138,6 +139,7 @@ static void cs_error(client_handle_t handle, int func, int ret)
 
 static dev_link_t *serial_attach(void)
 {
+    serial_info_t *info;
     client_reg_t client_reg;
     dev_link_t *link;
     int i, ret;
@@ -145,8 +147,11 @@ static dev_link_t *serial_attach(void)
     DEBUG(0, "serial_attach()\n");
 
     /* Create new serial device */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    info = kmalloc(sizeof(*info), GFP_KERNEL);
+    if (!info) return NULL;
+    memset(info, 0, sizeof(*info));
+    link = &info->link; link->priv = info;
+
     link->release.function = &serial_release;
     link->release.data = (u_long)link;
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
@@ -165,8 +170,6 @@ static dev_link_t *serial_attach(void)
        link->conf.Status = CCSR_AUDIO_ENA;
     }
     link->conf.IntType = INT_MEMORY_AND_IO;
-    link->priv = kmalloc(sizeof(struct serial_info_t), GFP_KERNEL);
-    memset(link->priv, 0, sizeof(struct serial_info_t));
     
     /* Register with Card Services */
     link->next = dev_list;
@@ -201,6 +204,7 @@ static dev_link_t *serial_attach(void)
 
 static void serial_detach(dev_link_t *link)
 {
+    serial_info_t *info = link->priv;
     dev_link_t **linkp;
     long flags;
     int ret;
@@ -232,8 +236,7 @@ static void serial_detach(dev_link_t *link)
     
     /* Unlink device structure, free bits */
     *linkp = link->next;
-    kfree_s(link->priv, sizeof(serial_info_t));
-    kfree_s(link, sizeof(struct dev_link_t));
+    kfree(info);
     
 } /* serial_detach */
 
@@ -326,7 +329,8 @@ static int simple_config(dev_link_t *link)
        if (cf->vpp1.present & (1<<CISTPL_POWER_VNOM))
            link->conf.Vpp1 = link->conf.Vpp2 =
                cf->vpp1.param[CISTPL_POWER_VNOM]/10000;
-       if ((cf->io.nwin > 0) && ((cf->io.win[0].base & 0xf) == 8)) {
+       if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) &&
+           (cf->io.win[0].base != 0)) {
            link->conf.ConfigIndex = cf->index;
            link->io.BasePort1 = cf->io.win[0].base;
            link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
@@ -347,6 +351,7 @@ static int simple_config(dev_link_t *link)
            link->conf.ConfigIndex = cf->index;
            for (j = 0; j < 5; j++) {
                link->io.BasePort1 = base[j];
+               link->io.IOAddrLines = base[j] ? 16 : 3;
                i = CardServices(RequestIO, link->handle,
                                 &link->io);
                if (i == CS_SUCCESS) goto found_port;
@@ -470,18 +475,14 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
 
 void serial_config(dev_link_t *link)
 {
-    client_handle_t handle;
-    serial_info_t *info;
+    client_handle_t handle = link->handle;
+    serial_info_t *info = link->priv;
     tuple_t tuple;
     u_short buf[128];
     cisparse_t parse;
     cistpl_cftable_entry_t *cf = &parse.cftable_entry;
     int i, last_ret, last_fn;
 
-    sti();
-    handle = link->handle;
-    info = link->priv;
-    
     DEBUG(0, "serial_config(0x%p)\n", link);
     
     tuple.TupleData = (cisdata_t *)buf;
@@ -572,8 +573,6 @@ void serial_release(u_long arg)
     serial_info_t *info = link->priv;
     int i;
     
-    sti();
-    
     DEBUG(0, "serial_release(0x%p)\n", link);
 
     for (i = 0; i < info->ndev; i++) {
index 8e8bf4cd80d830ecaf200a9def4f057b4f6dd6e8..0c720294de1d6fae4dc628c427127292e38b51b5 100644 (file)
@@ -1117,6 +1117,9 @@ int i2o_block_init(void)
         *      Finally see what is actually plugged in to our controllers
         */
 
+       for (i = 0; i < MAX_I2OB; i++)
+               register_disk(&i2ob_gendisk, MKDEV(MAJOR_NR,i<<4), 1<<4,
+                       &i2ob_fops, 0);
        i2ob_probe();
        
        register_reboot_notifier(&i2ob_reboot_notifier);
index 4c3c47d83a98725352dec1b3b76f32b5ccc0256d..ae87337f212186e9fbf8636de917e83aa43a7d52 100644 (file)
@@ -28,6 +28,7 @@
  */
 
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
index 7b6fd9613ff681f497e1f64ee716abb435699e49..4eef0607031bbe5ccba6ca11186680c02980bf5d 100644 (file)
@@ -1,3 +1,4 @@
+#include <linux/config.h>
 
 #define PCILYNX_DRIVER_NAME      "pcilynx"
 #define PCILYNX_MAJOR            177
index 13be7314161e71d964bc6906e6757c81c69ce49b..595d69b22963d7ff322d0394ea15cae2a92f2db0 100644 (file)
@@ -251,6 +251,7 @@ int el3_probe(struct net_device *dev)
                                if (el3_debug > 2) {
                                        printk("3c529: irq %d  ioaddr 0x%x  ifport %d\n", irq, ioaddr, if_port);
                                }
+                               EL3WINDOW(0);
                                for (i = 0; i < 3; i++) {
                                        phys_addr[i] = htons(read_eeprom(ioaddr, i));
                                }
index 0e9110a8bd3dfa6095cea21204fd946d90f944b8..4e4fc4157a0cb777e7e1ba264eb290c3d8ab7b08 100644 (file)
@@ -119,7 +119,7 @@ static int irq_list[4] = { -1 };
 #define TX_TIMEOUT  ((800*HZ)/1000)
 
 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
-static int max_interrupt_work = 64;
+static int max_interrupt_work = 32;
 
 /* Force full duplex modes? */
 static int full_duplex = 0;
@@ -207,6 +207,8 @@ enum Window4 {              /* Window 4: Xcvr/media bits. */
 #define MEDIA_TP       0x00C0  /* Enable link beat and jabber for 10baseT. */
 
 struct el3_private {
+       dev_link_t link;
+       struct net_device dev;
        dev_node_t node;
        struct net_device_stats stats;
        u16 advertising, partner;                       /* NWay media advertisement */
@@ -253,13 +255,11 @@ static void media_check(u_long arg);
 static int el3_open(struct net_device *dev);
 static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-static void update_stats(ioaddr_t addr, struct net_device *dev);
+static void update_stats(struct net_device *dev);
 static struct net_device_stats *el3_get_stats(struct net_device *dev);
 static int el3_rx(struct net_device *dev, int worklimit);
 static int el3_close(struct net_device *dev);
-#ifdef HAVE_PRIVATE_IOCTL
-static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
-#endif
+static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 static void set_rx_mode(struct net_device *dev);
 
 static dev_info_t dev_info = "3c574_cs";
@@ -307,6 +307,7 @@ static int tc574_init(struct net_device *dev)
 
 static dev_link_t *tc574_attach(void)
 {
+       struct el3_private *lp;
        client_reg_t client_reg;
        dev_link_t *link;
        struct net_device *dev;
@@ -316,8 +317,12 @@ static dev_link_t *tc574_attach(void)
        flush_stale_links();
 
        /* Create the PC card device object. */
-       link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-       memset(link, 0, sizeof(struct dev_link_t));
+       lp = kmalloc(sizeof(*lp), GFP_KERNEL);
+       if (!lp) return NULL;
+       memset(lp, 0, sizeof(*lp));
+       link = &lp->link; dev = &lp->dev;
+       link->priv = dev->priv = link->irq.Instance = lp;
+       
        link->release.function = &tc574_release;
        link->release.data = (u_long)link;
        link->io.NumPorts1 = 32;
@@ -336,33 +341,18 @@ static dev_link_t *tc574_attach(void)
        link->conf.ConfigIndex = 1;
        link->conf.Present = PRESENT_OPTION;
 
-       /* Create the network device object. */
-       dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-       memset(dev, 0, sizeof(struct net_device));
-
-       /* Make up a Odie-specific data structure. */
-       dev->priv = kmalloc(sizeof(struct el3_private), GFP_KERNEL);
-       memset(dev->priv, 0, sizeof(struct el3_private));
-
        /* The EL3-specific entries in the device structure. */
        dev->hard_start_xmit = &el3_start_xmit;
        dev->get_stats = &el3_get_stats;
-#ifdef HAVE_PRIVATE_IOCTL
-       dev->do_ioctl = &private_ioctl;
-#endif
+       dev->do_ioctl = &el3_ioctl;
        dev->set_multicast_list = &set_rx_mode;
        ether_setup(dev);
-       dev->name = ((struct el3_private *)dev->priv)->node.dev_name;
+       dev->name = lp->node.dev_name;
        dev->init = &tc574_init;
        dev->open = &el3_open;
        dev->stop = &el3_close;
        dev->tbusy = 1;
 
-       link->priv = dev;
-#if CS_RELEASE_CODE > 0x2911
-       link->irq.Instance = dev;
-#endif
-
        /* Register with Card Services */
        link->next = dev_list;
        dev_list = link;
@@ -396,6 +386,7 @@ static dev_link_t *tc574_attach(void)
 
 static void tc574_detach(dev_link_t *link)
 {
+       struct el3_private *lp = link->priv;
        dev_link_t **linkp;
        long flags;
 
@@ -428,15 +419,9 @@ static void tc574_detach(dev_link_t *link)
 
        /* Unlink device structure, free bits */
        *linkp = link->next;
-       if (link->priv) {
-               struct net_device *dev = link->priv;
-               if (link->dev != NULL)
-                       unregister_netdev(dev);
-               if (dev->priv)
-                       kfree(dev->priv);
-               kfree(link->priv);
-       }
-       kfree(link);
+       if (link->dev)
+               unregister_netdev(&lp->dev);
+       kfree(lp);
 
 } /* tc574_detach */
 
@@ -451,9 +436,9 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
 
 static void tc574_config(dev_link_t *link)
 {
-       client_handle_t handle;
-       struct net_device *dev;
-       struct el3_private *lp;
+       client_handle_t handle = link->handle;
+       struct el3_private *lp = link->priv;
+       struct net_device *dev = &lp->dev;
        tuple_t tuple;
        cisparse_t parse;
        u_short buf[32];
@@ -462,8 +447,6 @@ static void tc574_config(dev_link_t *link)
        u16 *phys_addr;
        char *cardname;
 
-       handle = link->handle;
-       dev = link->priv;
        phys_addr = (u16 *)dev->dev_addr;
 
        DEBUG(0, "3c574_config(0x%p)\n", link);
@@ -528,7 +511,6 @@ static void tc574_config(dev_link_t *link)
        link->state &= ~DEV_CONFIG_PENDING;
 
        ioaddr = dev->base_addr;
-       lp = (struct el3_private *)dev->priv;
        link->dev = &lp->node;
 
        /* The 3c574 normally uses an EEPROM for configuration info, including
@@ -641,7 +623,8 @@ failed:
 static void tc574_release(u_long arg)
 {
        dev_link_t *link = (dev_link_t *)arg;
-       struct net_device *dev = link->priv;
+       struct el3_private *lp = link->priv;
+       struct net_device *dev = &lp->dev;
 
        DEBUG(0, "3c574_release(0x%p)\n", link);
 
@@ -675,7 +658,8 @@ static int tc574_event(event_t event, int priority,
                                           event_callback_args_t *args)
 {
        dev_link_t *link = args->client_data;
-       struct net_device *dev = link->priv;
+       struct el3_private *lp = link->priv;
+       struct net_device *dev = &lp->dev;
 
        DEBUG(1, "3c574_event(0x%06x)\n", event);
 
@@ -922,10 +906,8 @@ static void tc574_reset(struct net_device *dev)
 static int el3_open(struct net_device *dev)
 {
        struct el3_private *lp = (struct el3_private *)dev->priv;
-       dev_link_t *link;
+       dev_link_t *link = &lp->link;
 
-       for (link = dev_list; link; link = link->next)
-               if (link->priv == dev) break;
        if (!DEV_OK(link))
                return -ENODEV;
        
@@ -935,14 +917,14 @@ static int el3_open(struct net_device *dev)
        
        tc574_reset(dev);
        lp->media.function = &media_check;
-       lp->media.data = (u_long)dev;
+       lp->media.data = (u_long)lp;
        lp->media.expires = jiffies + HZ;
        add_timer(&lp->media);
        
        DEBUG(2, "%s: opened, status %4.4x.\n",
                  dev->name, inw(dev->base_addr + EL3_STATUS));
        
-       return 0;                                       /* Always succeed */
+       return 0;
 }
 
 static void el3_tx_timeout(struct net_device *dev)
@@ -1054,14 +1036,13 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
 /* The EL3 interrupt handler. */
 static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-       struct net_device *dev = (struct net_device *)dev_id;
-       struct el3_private *lp;
+       struct el3_private *lp = dev_id;
+       struct net_device *dev = &lp->dev;
        ioaddr_t ioaddr, status;
        int work_budget = max_interrupt_work;
 
-       if ((dev == NULL) || !dev->start)
+       if ((lp == NULL) || !dev->start)
                return;
-       lp = (struct el3_private *)dev->priv;
        ioaddr = dev->base_addr;
 
 #ifdef PCMCIA_DEBUG
@@ -1098,7 +1079,7 @@ static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                if (status & (AdapterFailure | RxEarly | StatsFull)) {
                        /* Handle all uncommon interrupts. */
                        if (status & StatsFull)
-                               update_stats(ioaddr, dev);
+                               update_stats(dev);
                        if (status & RxEarly) {
                                work_budget = el3_rx(dev, work_budget);
                                outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
@@ -1151,8 +1132,8 @@ static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 */
 static void media_check(u_long arg)
 {
-    struct net_device *dev = (struct net_device *)(arg);
-    struct el3_private *lp = (struct el3_private *)dev->priv;
+    struct el3_private *lp = (struct el3_private *)arg;
+    struct net_device *dev = &lp->dev;
     ioaddr_t ioaddr = dev->base_addr;
     u_long flags;
        u_short /* cable, */ media, partner;
@@ -1165,7 +1146,7 @@ static void media_check(u_long arg)
                (inb(ioaddr + Timer) == 0xff)) {
                if (!lp->fast_poll)
                        printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
-               el3_interrupt(dev->irq, dev, NULL);
+               el3_interrupt(dev->irq, lp, NULL);
                lp->fast_poll = HZ;
     }
     if (lp->fast_poll) {
@@ -1228,7 +1209,7 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev)
        struct el3_private *lp = (struct el3_private *)dev->priv;
 
        if (dev->start)
-               update_stats(dev->base_addr, dev);
+               update_stats(dev);
        return &lp->stats;
 }
 
@@ -1236,9 +1217,10 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev)
        Suprisingly this need not be run single-threaded, but it effectively is.
        The counters clear when read, so the adds must merely be atomic.
  */
-static void update_stats(ioaddr_t ioaddr, struct net_device *dev)
+static void update_stats(struct net_device *dev)
 {
        struct el3_private *lp = (struct el3_private *)dev->priv;
+       ioaddr_t ioaddr = dev->base_addr;
        u8 upper_cnt;
 
        DEBUG(2, "%s: updating the statistics.\n", dev->name);
@@ -1252,16 +1234,16 @@ static void update_stats(ioaddr_t ioaddr, struct net_device *dev)
        lp->stats.tx_carrier_errors     += inb(ioaddr + 0);
        lp->stats.tx_heartbeat_errors   += inb(ioaddr + 1);
        /* Multiple collisions. */              inb(ioaddr + 2);
-       lp->stats.collisions            += inb(ioaddr + 3);
-       lp->stats.tx_window_errors      += inb(ioaddr + 4);
-       lp->stats.rx_fifo_errors        += inb(ioaddr + 5);
-       lp->stats.tx_packets            += inb(ioaddr + 6);
-       upper_cnt = inb(ioaddr + 9);
-       lp->stats.tx_packets            += (upper_cnt&0x30) << 4;
-       /* Rx packets   */                      inb(ioaddr + 7);
-       /* Tx deferrals */                      inb(ioaddr + 8);
-       lp->stats.rx_bytes += inw(ioaddr + 10);
-       lp->stats.tx_bytes += inw(ioaddr + 12);
+       lp->stats.collisions                    += inb(ioaddr + 3);
+       lp->stats.tx_window_errors              += inb(ioaddr + 4);
+       lp->stats.rx_fifo_errors                += inb(ioaddr + 5);
+       lp->stats.tx_packets                    += inb(ioaddr + 6);
+       upper_cnt                                                = inb(ioaddr + 9);
+       lp->stats.tx_packets                    += (upper_cnt&0x30) << 4;
+       /* Rx packets   */                              inb(ioaddr + 7);
+       /* Tx deferrals */                              inb(ioaddr + 8);
+       lp->stats.rx_bytes                              += inw(ioaddr + 10);
+       lp->stats.tx_bytes                              += inw(ioaddr + 12);
 
        /* With Vortex and later we must also clear the BadSSD counter. */
        EL3WINDOW(4);
@@ -1284,12 +1266,12 @@ static int el3_rx(struct net_device *dev, int worklimit)
                        short error = rx_status & 0x3800;
                        lp->stats.rx_errors++;
                        switch (error) {
-                       case 0x0000:            lp->stats.rx_over_errors++; break;
-                       case 0x0800:            lp->stats.rx_length_errors++; break;
-                       case 0x1000:            lp->stats.rx_frame_errors++; break;
-                       case 0x1800:            lp->stats.rx_length_errors++; break;
-                       case 0x2000:            lp->stats.rx_frame_errors++; break;
-                       case 0x2800:            lp->stats.rx_crc_errors++; break;
+                       case 0x0000:    lp->stats.rx_over_errors++; break;
+                       case 0x0800:    lp->stats.rx_length_errors++; break;
+                       case 0x1000:    lp->stats.rx_frame_errors++; break;
+                       case 0x1800:    lp->stats.rx_length_errors++; break;
+                       case 0x2000:    lp->stats.rx_frame_errors++; break;
+                       case 0x2800:    lp->stats.rx_crc_errors++; break;
                        }
                } else {
                        short pkt_len = rx_status & 0x7ff;
@@ -1343,14 +1325,13 @@ static int el3_rx(struct net_device *dev, int worklimit)
        return worklimit;
 }
 
-#ifdef HAVE_PRIVATE_IOCTL
 /* Provide ioctl() calls to examine the MII xcvr state. */
-static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
-       struct el3_private *vp = (struct el3_private *)dev->priv;
+       struct el3_private *lp = (struct el3_private *)dev->priv;
        ioaddr_t ioaddr = dev->base_addr;
        u16 *data = (u16 *)&rq->ifr_data;
-       int phy = vp->phys[0] & 0x1f;
+       int phy = lp->phys[0] & 0x1f;
 
        DEBUG(2, "%s: In ioct(%-.6s, %#4.4x) %4.4x %4.4x %4.4x %4.4x.\n",
                  dev->name, rq->ifr_ifrn.ifrn_name, cmd,
@@ -1378,7 +1359,7 @@ static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                        int saved_window;
                        long flags;
 
-                       if (!suser())
+                       if (!capable(CAP_NET_ADMIN))
                                return -EPERM;
                        save_flags(flags);
                        cli();
@@ -1393,7 +1374,6 @@ static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                return -EOPNOTSUPP;
        }
 }
-#endif  /* HAVE_PRIVATE_IOCTL */
 
 /* The Odie chip has a 64 bin multicast filter, but the bit layout is not
    documented.  Until it is we revert to receiving all multicast frames when
@@ -1419,12 +1399,8 @@ static void set_rx_mode(struct net_device *dev)
 static int el3_close(struct net_device *dev)
 {
        ioaddr_t ioaddr = dev->base_addr;
-       dev_link_t *link;
-
-       for (link = dev_list; link; link = link->next)
-               if (link->priv == dev) break;
-       if (link == NULL)
-               return -ENODEV;
+       struct el3_private *lp = dev->priv;
+       dev_link_t *link = &lp->link;
 
        DEBUG(2, "%s: shutting down ethercard.\n", dev->name);
        
@@ -1439,12 +1415,12 @@ static int el3_close(struct net_device *dev)
                /* Note: Switching to window 0 may disable the IRQ. */
                EL3WINDOW(0);
                
-               update_stats(ioaddr, dev);
+               update_stats(dev);
        }
 
        link->open--;
        dev->start = 0;
-       del_timer(&((struct el3_private *)dev->priv)->media);
+       del_timer(&lp->media);
        if (link->state & DEV_STALE_CONFIG) {
                link->release.expires = jiffies + HZ/20;
                link->state |= DEV_RELEASE_PENDING;
index d5b3e95a0025196708a95fa3c7cdabcf8fdc0211..82f534f0c68e4fcd9be3024374d05bf3e53b1fd9 100644 (file)
@@ -24,7 +24,7 @@ static const int rx_copybreak = 200;
 /* Allow setting MTU to a larger size, bypassing the normal ethernet setup. */
 static const int mtu = 1500;
 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
-static int max_interrupt_work = 20;
+static int max_interrupt_work = 32;
 
 /* Put out somewhat more debugging messages. (0: no msg, 1 minimal .. 6). */
 #define vortex_debug debug
@@ -40,7 +40,7 @@ static int rx_nocopy = 0, rx_copy = 0, queued_packet = 0, rx_csumhits;
 
 /* A few values that may be tweaked. */
 /* Time in jiffies before concluding the transmitter is hung. */
-#define TX_TIMEOUT  (2*HZ)
+#define TX_TIMEOUT  ((400*HZ)/1000)
 
 /* Keep the ring sizes a power of two for efficiency. */
 #define TX_RING_SIZE   16
@@ -442,13 +442,15 @@ struct vortex_private {
                full_bus_master_tx:1, full_bus_master_rx:2, /* Boomerang  */
                hw_csums:1,                             /* Has hardware checksums. */
                tx_full:1,
-               open:1;
+               open:1,
+               reap:1;
        u16 status_enable;
        u16 intr_enable;
        u16 available_media;                            /* From Wn3_Options. */
        u16 capabilities, info1, info2;         /* Various, from EEPROM. */
        u16 advertising;                                        /* NWay media advertisement */
        unsigned char phys[2];                          /* MII device addresses. */
+       u16 deferred;
 };
 
 /* The action to take with a media selection timer tick.
@@ -520,6 +522,22 @@ static int compaq_ioaddr = 0, compaq_irq = 0, compaq_device_id = 0x5900;
 
 #include <pcmcia/driver_ops.h>
 
+static void vortex_reap(void)
+{
+       struct net_device **devp, **next;
+       printk(KERN_DEBUG "vortex_reap()\n");
+       for (devp = &root_vortex_dev; *devp; devp = next) {
+               struct vortex_private *vp = (*devp)->priv;
+               next = &vp->next_module;
+               if (vp->open || !vp->reap) continue;
+               unregister_netdev(*devp);
+               if (vp->cb_fn_base) iounmap(vp->cb_fn_base);
+               kfree(*devp);
+               kfree(vp->priv_addr);
+               *devp = *next; next = devp;
+       }
+}
+
 static dev_node_t *vortex_attach(dev_locator_t *loc)
 {
        u16 dev_id, vendor_id;
@@ -528,6 +546,7 @@ static dev_node_t *vortex_attach(dev_locator_t *loc)
        struct net_device *dev;
        int chip_idx;
 
+       vortex_reap();
        if (loc->bus != LOC_PCI) return NULL;
        bus = loc->b.pci.bus; devfn = loc->b.pci.devfn;
        pcibios_read_config_dword(bus, devfn, PCI_BASE_ADDRESS_0, &io);
@@ -567,23 +586,16 @@ static dev_node_t *vortex_attach(dev_locator_t *loc)
 
 static void vortex_detach(dev_node_t *node)
 {
-       struct net_device **devp, **next;
-       printk(KERN_INFO "vortex_detach(%s)\n", node->dev_name);
-       for (devp = &root_vortex_dev; *devp; devp = next) {
-               next = &((struct vortex_private *)(*devp)->priv)->next_module;
-               if (strcmp((*devp)->name, node->dev_name) == 0) break;
+       struct net_device *dev, *next;
+       printk(KERN_DEBUG "vortex_detach(%s)\n", node->dev_name);
+       for (dev = root_vortex_dev; dev; dev = next) {
+               next = ((struct vortex_private *)dev->priv)->next_module;
+               if (strcmp(dev->name, node->dev_name) == 0) break;
        }
-       if (*devp) {
-               struct net_device *dev = *devp;
+       if (dev && dev->priv) {
                struct vortex_private *vp = dev->priv;
-               if (dev->flags & IFF_UP)
-                       vortex_close(dev);
-               dev->flags &= ~(IFF_UP|IFF_RUNNING);
-               unregister_netdev(dev);
-               if (vp->cb_fn_base) iounmap(vp->cb_fn_base);
-               kfree(dev);
-               *devp = *next;
-               kfree(vp->priv_addr);
+               if (vp->open) vortex_down(dev);
+               vp->reap = 1;
                kfree(node);
                MOD_DEC_USE_COUNT;
        }
@@ -592,7 +604,7 @@ static void vortex_detach(dev_node_t *node)
 static void vortex_suspend(dev_node_t *node)
 {
        struct net_device *dev, *next;
-       printk(KERN_INFO "vortex_suspend(%s)\n", node->dev_name);
+       printk(KERN_DEBUG "vortex_suspend(%s)\n", node->dev_name);
        for (dev = root_vortex_dev; dev; dev = next) {
                next = ((struct vortex_private *)dev->priv)->next_module;
                if (strcmp(dev->name, node->dev_name) == 0) break;
@@ -606,7 +618,7 @@ static void vortex_suspend(dev_node_t *node)
 static void vortex_resume(dev_node_t *node)
 {
        struct net_device *dev, *next;
-       printk(KERN_INFO "vortex_resume(%s)\n", node->dev_name);
+       printk(KERN_DEBUG "vortex_resume(%s)\n", node->dev_name);
        for (dev = root_vortex_dev; dev; dev = next) {
                next = ((struct vortex_private *)dev->priv)->next_module;
                if (strcmp(dev->name, node->dev_name) == 0) break;
@@ -797,9 +809,9 @@ static struct net_device *vortex_probe1(int pci_bus, int pci_devfn,
        {
                void *mem = kmalloc(sizeof(*vp) + 15, GFP_KERNEL);
                vp =  (void *)(((long)mem + 15) & ~15);
+               memset(vp, 0, sizeof(*vp));
                vp->priv_addr = mem;
        }
-       memset(vp, 0, sizeof(*vp));
        dev->priv = vp;
 
        vp->next_module = root_vortex_dev;
@@ -1133,7 +1145,9 @@ vortex_up(struct net_device *dev)
                dev->hard_start_xmit = &boomerang_start_xmit;
                vp->cur_tx = vp->dirty_tx = 0;
                outb(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); /* Room for a packet. */
-               /* Clear the Tx ring. */
+               /* Clear the Rx, Tx rings. */
+               for (i = 0; i < RX_RING_SIZE; i++)
+                       vp->rx_ring[i].status = 0;
                for (i = 0; i < TX_RING_SIZE; i++)
                        vp->tx_skbuff[i] = 0;
                outl(0, ioaddr + DownListPtr);
@@ -1172,6 +1186,10 @@ vortex_open(struct net_device *dev)
        struct vortex_private *vp = (struct vortex_private *)dev->priv;
        int i;
 
+#ifdef CARDBUS
+       if (vp->reap)
+               return -ENODEV;
+#endif
        /* Use the now-standard shared IRQ implementation. */
        if (request_irq(dev->irq, &vortex_interrupt, SA_SHIRQ, dev->name, dev)) {
                return -EAGAIN;
@@ -1306,6 +1324,8 @@ static void vortex_timer(unsigned long data)
 
        vp->timer.expires = RUN_AT(next_tick);
        add_timer(&vp->timer);
+       if (vp->deferred)
+               outw(FakeIntr, ioaddr + EL3_CMD);
        return;
 }
 
@@ -1431,10 +1451,10 @@ vortex_error(struct net_device *dev, int status)
                           dev->name, fifo_diag);
                /* Adapter failure requires Tx/Rx reset and reinit. */
                if (vp->full_bus_master_tx) {
+                       /* In this case, blow the card away */
+                       vortex_down(dev);
                        wait_for_completion(dev, TotalReset | 0xff);
-                       /* Re-enable the receiver. */
-                       outw(RxEnable, ioaddr + EL3_CMD);
-                       outw(TxEnable, ioaddr + EL3_CMD);
+                       vortex_up(dev);
                } else if (fifo_diag & 0x0400)
                        do_tx_reset = 1;
                if (fifo_diag & 0x3000) {
@@ -1597,6 +1617,10 @@ static void vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        ioaddr = dev->base_addr;
        latency = inb(ioaddr + Timer);
        status = inw(ioaddr + EL3_STATUS);
+       if (status & IntReq) {
+               status |= vp->deferred;
+               vp->deferred = 0;
+       }
 
        if (status == 0xffff)
                goto handler_exit;
@@ -1665,19 +1689,20 @@ static void vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                }
 
                if (--work_done < 0) {
-                       if ((status & (0x7fe - (UpComplete | DownComplete))) == 0) {
-                               /* Just ack these and return. */
-                               outw(AckIntr | UpComplete | DownComplete, ioaddr + EL3_CMD);
-                       } else {
-                               printk(KERN_WARNING "%s: Too much work in interrupt, status "
-                                          "%4.4x.  Temporarily disabling functions (%4.4x).\n",
-                                          dev->name, status, SetStatusEnb | ((~status) & 0x7FE));
-                               /* Disable all pending interrupts. */
-                               outw(SetStatusEnb | ((~status) & 0x7FE), ioaddr + EL3_CMD);
-                               outw(AckIntr | 0x7FF, ioaddr + EL3_CMD);
-                               /* The timer will reenable interrupts. */
-                               break;
-                       }
+                       printk(KERN_WARNING "%s: Too much work in interrupt, status "
+                                  "%4.4x.\n", dev->name, status);
+                       /* Disable all pending interrupts. */
+                       do {
+                               vp->deferred |= status;
+                               outw(SetStatusEnb | (~vp->deferred & vp->status_enable),
+                                        ioaddr + EL3_CMD);
+                               outw(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD);
+                       } while ((status = inw(ioaddr + EL3_CMD)) & IntLatch);
+                       /* The timer will reenable interrupts. */
+                       del_timer(&vp->timer);
+                       vp->timer.expires = RUN_AT(1);
+                       add_timer(&vp->timer);
+                       break;
                }
                /* Acknowledge the IRQ. */
                outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD);
@@ -1758,12 +1783,8 @@ static int vortex_rx(struct net_device *dev)
                                printk(KERN_NOTICE "%s: No memory to allocate a sk_buff of "
                                           "size %d.\n", dev->name, pkt_len);
                }
-               outw(RxDiscard, ioaddr + EL3_CMD);
                vp->stats.rx_dropped++;
-               /* Wait a limited time to skip this packet. */
-               for (i = 200; i >= 0; i--)
-                       if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress))
-                               break;
+               wait_for_completion(dev, RxDiscard);
        }
 
        return 0;
@@ -2185,6 +2206,7 @@ void cleanup_module(void)
 
 #ifdef CARDBUS
        unregister_driver(&vortex_ops);
+       vortex_reap();
 #endif
 
        /* No need to check MOD_IN_USE, as sys_delete_module() checks. */
index 40e5a643fa9b77634bd0bfa377fcccb13d4d0e36..e95b871043738c24631af4fd1ade8f030b86399e 100644 (file)
@@ -4,7 +4,7 @@
     
     Copyright (C) 1999 David A. Hinds -- dhinds@pcmcia.sourceforge.org
 
-    3c589_cs.c 1.137 1999/11/08 20:46:17
+    3c589_cs.c 1.143 1999/12/30 21:28:10
 
     The network driver code is based on Donald Becker's 3c589 code:
     
@@ -99,13 +99,15 @@ enum RxFilter {
 #define TX_TIMEOUT     ((400*HZ)/1000)
 
 struct el3_private {
-    dev_node_t node;
+    dev_link_t         link;
+    struct net_device  dev;
+    dev_node_t                 node;
     struct net_device_stats stats;
     /* For transceiver monitoring */
-    struct timer_list media;
-    u_short    media_status;
-    u_short    fast_poll;
-    u_long     last_irq;
+    struct timer_list  media;
+    u_short            media_status;
+    u_short            fast_poll;
+    u_long             last_irq;
 };
 
 static char *if_names[] = { "auto", "10baseT", "10base2", "AUI" };
@@ -115,7 +117,7 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"3c589_cs.c 1.137 1999/11/08 20:46:17 (David Hinds)";
+"3c589_cs.c 1.143 1999/12/30 21:28:10 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -149,7 +151,7 @@ static int el3_config(struct net_device *dev, struct ifmap *map);
 static int el3_open(struct net_device *dev);
 static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-static void update_stats(ioaddr_t addr, struct net_device *dev);
+static void update_stats(struct net_device *dev);
 static struct net_device_stats *el3_get_stats(struct net_device *dev);
 static int el3_rx(struct net_device *dev);
 static int el3_close(struct net_device *dev);
@@ -211,6 +213,7 @@ static int tc589_init(struct net_device *dev)
 
 static dev_link_t *tc589_attach(void)
 {
+    struct el3_private *lp;
     client_reg_t client_reg;
     dev_link_t *link;
     struct net_device *dev;
@@ -220,8 +223,12 @@ static dev_link_t *tc589_attach(void)
     flush_stale_links();
     
     /* Create new ethernet device */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    lp = kmalloc(sizeof(*lp), GFP_KERNEL);
+    if (!lp) return NULL;
+    memset(lp, 0, sizeof(*lp));
+    link = &lp->link; dev = &lp->dev;
+    link->priv = dev->priv = link->irq.Instance = lp;
+    
     link->release.function = &tc589_release;
     link->release.data = (u_long)link;
     link->io.NumPorts1 = 16;
@@ -240,25 +247,17 @@ static dev_link_t *tc589_attach(void)
     link->conf.ConfigIndex = 1;
     link->conf.Present = PRESENT_OPTION;
     
-    dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-    memset(dev, 0, sizeof(struct net_device));
-    
-    /* Make up a EL3-specific-data structure. */
-    dev->priv = kmalloc(sizeof(struct el3_private), GFP_KERNEL);
-    memset(dev->priv, 0, sizeof(struct el3_private));
-    
     /* The EL3-specific entries in the device structure. */
     dev->hard_start_xmit = &el3_start_xmit;
     dev->set_config = &el3_config;
     dev->get_stats = &el3_get_stats;
     dev->set_multicast_list = &set_multicast_list;
     ether_setup(dev);
-    dev->name = ((struct el3_private *)dev->priv)->node.dev_name;
+    dev->name = lp->node.dev_name;
     dev->init = &tc589_init;
     dev->open = &el3_open;
     dev->stop = &el3_close;
     dev->tbusy = 1;
-    link->priv = link->irq.Instance = dev;
     
     /* Register with Card Services */
     link->next = dev_list;
@@ -293,6 +292,7 @@ static dev_link_t *tc589_attach(void)
 
 static void tc589_detach(dev_link_t *link)
 {
+    struct el3_private *lp = link->priv;
     dev_link_t **linkp;
     long flags;
     
@@ -325,15 +325,9 @@ static void tc589_detach(dev_link_t *link)
     
     /* Unlink device structure, free bits */
     *linkp = link->next;
-    if (link->priv) {
-       struct net_device *dev = link->priv;
-       if (link->dev != NULL)
-           unregister_netdev(dev);
-       if (dev->priv)
-           kfree(dev->priv);
-       kfree(link->priv);
-    }
-    kfree(link);
+    if (link->dev)
+       unregister_netdev(&lp->dev);
+    kfree(lp);
     
 } /* tc589_detach */
 
@@ -350,8 +344,9 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
 
 static void tc589_config(dev_link_t *link)
 {
-    client_handle_t handle;
-    struct net_device *dev;
+    client_handle_t handle = link->handle;
+    struct el3_private *lp = link->priv;
+    struct net_device *dev = &lp->dev;
     tuple_t tuple;
     cisparse_t parse;
     u_short buf[32], *phys_addr;
@@ -359,12 +354,9 @@ static void tc589_config(dev_link_t *link)
     ioaddr_t ioaddr;
     char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
     
-    handle = link->handle;
-    dev = link->priv;
-    phys_addr = (u_short *)dev->dev_addr;
-
     DEBUG(0, "3c589_config(0x%p)\n", link);
 
+    phys_addr = (u_short *)dev->dev_addr;
     tuple.Attributes = 0;
     tuple.DesiredTuple = CISTPL_CONFIG;
     CS_CHECK(GetFirstTuple, handle, &tuple);
@@ -434,7 +426,7 @@ static void tc589_config(dev_link_t *link)
        }
     }
     
-    link->dev = &((struct el3_private *)dev->priv)->node;
+    link->dev = &lp->node;
     
     /* The address and resource configuration register aren't loaded from
        the EEPROM and *must* be set to 0 and IRQ3 for the PCMCIA version. */
@@ -507,7 +499,8 @@ static int tc589_event(event_t event, int priority,
                       event_callback_args_t *args)
 {
     dev_link_t *link = args->client_data;
-    struct net_device *dev = link->priv;
+    struct el3_private *lp = link->priv;
+    struct net_device *dev = &lp->dev;
     
     DEBUG(1, "3c589_event(0x%06x)\n", event);
     
@@ -683,10 +676,8 @@ static int el3_config(struct net_device *dev, struct ifmap *map)
 static int el3_open(struct net_device *dev)
 {
     struct el3_private *lp = (struct el3_private *)dev->priv;
-    dev_link_t *link;
+    dev_link_t *link = &lp->link;
     
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
     if (!DEV_OK(link))
        return -ENODEV;
 
@@ -696,14 +687,14 @@ static int el3_open(struct net_device *dev)
     
     tc589_reset(dev);
     lp->media.function = &media_check;
-    lp->media.data = (u_long)dev;
+    lp->media.data = (u_long)lp;
     lp->media.expires = jiffies + HZ;
     add_timer(&lp->media);
 
     DEBUG(1, "%s: opened, status %4.4x.\n",
          dev->name, inw(dev->base_addr + EL3_STATUS));
     
-    return 0;                                  /* Always succeed */
+    return 0;
 }
 
 static void el3_tx_timeout(struct net_device *dev)
@@ -746,7 +737,6 @@ static void pop_tx_status(struct net_device *dev)
 
 static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
-    struct el3_private *lp = (struct el3_private *)dev->priv;
     ioaddr_t ioaddr = dev->base_addr;
 
     /* Transmitter timeout, serious problems. */
@@ -765,6 +755,7 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
        printk(KERN_NOTICE "%s: transmitter access conflict.\n",
               dev->name);
     else {
+       struct el3_private *lp = (struct el3_private *)dev->priv;
        lp->stats.tx_bytes += skb->len;
        /* Put out the doubleword header... */
        outw(skb->len, ioaddr + TX_FIFO);
@@ -789,14 +780,13 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
 /* The EL3 interrupt handler. */
 static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-    struct net_device *dev = (struct net_device *)dev_id;
-    struct el3_private *lp;
+    struct el3_private *lp = dev_id;
+    struct net_device *dev = &lp->dev;
     ioaddr_t ioaddr, status;
     int i = 0;
     
-    if ((dev == NULL) || !dev->start)
+    if ((lp == NULL) || !dev->start)
        return;
-    lp = (struct el3_private *)dev->priv;
     ioaddr = dev->base_addr;
 
 #ifdef PCMCIA_DEBUG
@@ -834,7 +824,7 @@ static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        if (status & (AdapterFailure | RxEarly | StatsFull)) {
            /* Handle all uncommon interrupts. */
            if (status & StatsFull)             /* Empty statistics. */
-               update_stats(ioaddr, dev);
+               update_stats(dev);
            if (status & RxEarly) {             /* Rx early is unused. */
                el3_rx(dev);
                outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
@@ -883,14 +873,14 @@ static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
 static void media_check(u_long arg)
 {
-    struct net_device *dev = (struct net_device *)(arg);
-    struct el3_private *lp = (struct el3_private *)dev->priv;
+    struct el3_private *lp = (struct el3_private *)(arg);
+    struct net_device *dev = &lp->dev;
     ioaddr_t ioaddr = dev->base_addr;
     u_short media, errs;
     u_long flags;
 
     if (dev->start == 0) goto reschedule;
-    
+
     EL3WINDOW(1);
     /* Check for pending interrupt with expired latency timer: with
        this, we can limp along even if the interrupt is blocked */
@@ -898,7 +888,7 @@ static void media_check(u_long arg)
        (inb(ioaddr + EL3_TIMER) == 0xff)) {
        if (!lp->fast_poll)
            printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
-       el3_interrupt(dev->irq, dev, NULL);
+       el3_interrupt(dev->irq, lp, NULL);
        lp->fast_poll = HZ;
     }
     if (lp->fast_poll) {
@@ -965,14 +955,12 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev)
 {
     struct el3_private *lp = (struct el3_private *)dev->priv;
     unsigned long flags;
-    dev_link_t *link;
+    dev_link_t *link = &lp->link;
 
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
     if (DEV_OK(link)) {
        save_flags(flags);
        cli();
-       update_stats(dev->base_addr, dev);
+       update_stats(dev);
        restore_flags(flags);
     }
     return &lp->stats;
@@ -984,10 +972,11 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev)
   operation, and it's simpler for the rest of the driver to assume that
   window 1 is always valid rather than use a special window-state variable.
 */
-static void update_stats(ioaddr_t ioaddr, struct net_device *dev)
+static void update_stats(struct net_device *dev)
 {
     struct el3_private *lp = (struct el3_private *)dev->priv;
-    
+    ioaddr_t ioaddr = dev->base_addr;
+
     DEBUG(2, "%s: updating the statistics.\n", dev->name);
     /* Turn off statistics updates while reading. */
     outw(StatsDisable, ioaddr + EL3_CMD);
@@ -1002,8 +991,8 @@ static void update_stats(ioaddr_t ioaddr, struct net_device *dev)
     lp->stats.tx_packets               += inb(ioaddr + 6);
     /* Rx packets   */                 inb(ioaddr + 7);
     /* Tx deferrals */                 inb(ioaddr + 8);
-    inw(ioaddr + 10);  /* Total Rx and Tx octets. */
-    inw(ioaddr + 12);
+    /* Rx octets */                    inw(ioaddr + 10);
+    /* Tx octets */                    inw(ioaddr + 12);
     
     /* Back to window 1, and turn statistics back on. */
     EL3WINDOW(1);
@@ -1025,12 +1014,12 @@ static int el3_rx(struct net_device *dev)
            short error = rx_status & 0x3800;
            lp->stats.rx_errors++;
            switch (error) {
-           case 0x0000:                lp->stats.rx_over_errors++; break;
-           case 0x0800:                lp->stats.rx_length_errors++; break;
-           case 0x1000:                lp->stats.rx_frame_errors++; break;
-           case 0x1800:                lp->stats.rx_length_errors++; break;
-           case 0x2000:                lp->stats.rx_frame_errors++; break;
-           case 0x2800:                lp->stats.rx_crc_errors++; break;
+           case 0x0000:        lp->stats.rx_over_errors++; break;
+           case 0x0800:        lp->stats.rx_length_errors++; break;
+           case 0x1000:        lp->stats.rx_frame_errors++; break;
+           case 0x1800:        lp->stats.rx_length_errors++; break;
+           case 0x2000:        lp->stats.rx_frame_errors++; break;
+           case 0x2800:        lp->stats.rx_crc_errors++; break;
            }
        } else {
            short pkt_len = rx_status & 0x7ff;
@@ -1073,10 +1062,10 @@ static int el3_rx(struct net_device *dev)
  */
 static void set_multicast_list(struct net_device *dev)
 {
+    struct el3_private *lp = dev->priv;
+    dev_link_t *link = &lp->link;
     ioaddr_t ioaddr = dev->base_addr;
-    dev_link_t *link;
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
+
     if (!(DEV_OK(link))) return;
 #ifdef PCMCIA_DEBUG
     if (pc_debug > 2) {
@@ -1099,13 +1088,9 @@ static void set_multicast_list(struct net_device *dev)
 
 static int el3_close(struct net_device *dev)
 {
+    struct el3_private *lp = dev->priv;
+    dev_link_t *link = &lp->link;
     ioaddr_t ioaddr = dev->base_addr;
-    dev_link_t *link;
-
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
-    if (link == NULL)
-       return -ENODEV;
     
     DEBUG(1, "%s: shutting down ethercard.\n", dev->name);
 
@@ -1133,12 +1118,12 @@ static int el3_close(struct net_device *dev)
         
        /* Check if the card still exists */
        if ((inw(ioaddr+EL3_STATUS) & 0xe000) == 0x2000)
-           update_stats(ioaddr, dev);
+           update_stats(dev);
     }
 
     link->open--;
     dev->start = 0;
-    del_timer(&((struct el3_private *)dev->priv)->media);
+    del_timer(&lp->media);
     if (link->state & DEV_STALE_CONFIG) {
        link->release.expires = jiffies + HZ/20;
        link->state |= DEV_RELEASE_PENDING;
index d9164e476990ddfbbb3316752b2da7df54b1bfbe..be83dc2056db62b7cbd07d66fd8db33813381b51 100644 (file)
@@ -39,6 +39,4 @@ if [ "$CONFIG_PCMCIA_3C589" = "y" -o "$CONFIG_PCMCIA_3C574" = "y" -o \
      "$CONFIG_PCMCIA_XIRC2PS" = "y" -o "$CONFIG_PCMCIA_RAYCS" = "y" -o \
      "$CONFIG_PCMCIA_NETWAVE" = "y" -o "$CONFIG_PCMCIA_WAVELAN" = "y" ]; then
    define_bool CONFIG_PCMCIA_NETCARD y
-else
-   define_bool CONFIG_PCMCIA_NETCARD n
 fi
index 82e3ce57ac7fed90f5960630a2688b7868b436cf..9dd2c188e2f1fa7677be1bbb2a0017e3f3766a73 100644 (file)
@@ -69,16 +69,6 @@ MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...)
 #endif
 
-/*
-   For debugging this driver you may need more information.
-   To enable printing registers or status, set 'fmvj18x_debug=#' option .
- */
-#ifdef FMVJ18X_DEBUG
-static int fmvj18x_debug = FMVJ18X_DEBUG;
-#else
-static int fmvj18x_debug = 2;
-#endif /* FMVJ18X_DEBUG */
-
 /* Bit map of interrupts to choose from */
 /* This means pick from 15, 14, 12, 11, 10, 9, 7, 5, 4, and 3 */
 static u_int irq_mask = 0xdeb8;
@@ -138,6 +128,8 @@ typedef enum { MBH10302, MBH10304, TDK, CONTEC, LA501 } cardtype_t;
     driver specific data structure
 */
 typedef struct local_info_t {
+    dev_link_t link;
+    struct net_device dev;
     dev_node_t node;
     struct net_device_stats stats;
     long open_time;
@@ -273,17 +265,21 @@ static void cs_error(client_handle_t handle, int func, int ret)
 
 static dev_link_t *fmvj18x_attach(void)
 {
-    client_reg_t client_reg;
+    local_info_t *lp;
     dev_link_t *link;
     struct net_device *dev;
+    client_reg_t client_reg;
     int i, ret;
     
     DEBUG(0, "fmvj18x_attach()\n");
     flush_stale_links();
 
-    /* Initialize the dev_link_t structure */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    /* Make up a FMVJ18x specific data structure */
+    lp = kmalloc(sizeof(*lp), GFP_KERNEL);
+    if (!lp) return NULL;
+    memset(lp, 0, sizeof(*lp));
+    link = &lp->link; dev = &lp->dev;
+    link->priv = dev->priv = link->irq.Instance = lp;
 
     link->release.function = &fmvj18x_release;
     link->release.data = (u_long)link;
@@ -308,24 +304,17 @@ static dev_link_t *fmvj18x_attach(void)
     link->conf.Vcc = 50;
     link->conf.IntType = INT_MEMORY_AND_IO;
 
-    /* Make up a FMVJ18x specific data structure */
-    dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-    memset(dev, 0, sizeof(struct net_device));
-    dev->priv = kmalloc(sizeof(local_info_t), GFP_KERNEL);
-    memset(dev->priv, 0, sizeof(local_info_t));
-
     /* The FMVJ18x specific entries in the device structure. */
     dev->hard_start_xmit = &fjn_start_xmit;
     dev->set_config = &fjn_config;
     dev->get_stats = &fjn_get_stats;
     dev->set_multicast_list = &set_rx_mode;
     ether_setup(dev);
-    dev->name = ((local_info_t *)dev->priv)->node.dev_name;
+    dev->name = lp->node.dev_name;
     dev->init = &fmvj18x_init;
     dev->open = &fjn_open;
     dev->stop = &fjn_close;
     dev->tbusy = 0xFF;
-    link->priv = link->irq.Instance = dev;
     
     /* Register with Card Services */
     link->next = dev_list;
@@ -353,6 +342,7 @@ static dev_link_t *fmvj18x_attach(void)
 
 static void fmvj18x_detach(dev_link_t *link)
 {
+    local_info_t *lp = link->priv;
     dev_link_t **linkp;
     long flags;
     
@@ -386,15 +376,9 @@ static void fmvj18x_detach(dev_link_t *link)
     
     /* Unlink device structure, free pieces */
     *linkp = link->next;
-    if (link->priv) {
-       struct net_device *dev = link->priv;
-       if (link->dev != NULL)
-           unregister_netdev(dev);
-       if (dev->priv) 
-           kfree(dev->priv);
-       kfree(dev);
-    }
-    kfree(link);
+    if (link->dev)
+       unregister_netdev(&lp->dev);
+    kfree(lp);
     
 } /* fmvj18x_detach */
 
@@ -405,10 +389,11 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
 
 static void fmvj18x_config(dev_link_t *link)
 {
-    client_handle_t handle;
+    client_handle_t handle = link->handle;
+    local_info_t *lp = link->priv;
+    struct net_device *dev = &lp->dev;
     tuple_t tuple;
     cisparse_t parse;
-    struct net_device *dev;
     u_short buf[32];
     int i, last_fn, last_ret;
     ioaddr_t ioaddr;
@@ -416,9 +401,6 @@ static void fmvj18x_config(dev_link_t *link)
     char *card_name = "unknown";
     u_char *node_id;
     
-    handle = link->handle;
-    dev =link->priv;
-
     DEBUG(0, "fmvj18x_config(0x%p)\n", link);
 
     /*
@@ -538,10 +520,10 @@ static void fmvj18x_config(dev_link_t *link)
        break;
     }
 
-    link->dev = &((local_info_t *)dev->priv)->node;
+    link->dev = &lp->node;
     link->state &= ~DEV_CONFIG_PENDING;
 
-    ((struct local_info_t *)dev->priv)->cardtype = cardtype ;
+    lp->cardtype = cardtype;
     /* print current configuration */
     printk(KERN_INFO "%s: %s, sram %s, port %#3lx, irq %d, hw_addr ", 
           dev->name, card_name, sram_config == 0 ? "4K TX*2" : "8K TX*2", 
@@ -594,7 +576,8 @@ static int fmvj18x_event(event_t event, int priority,
                          event_callback_args_t *args)
 {
     dev_link_t *link = args->client_data;
-    struct net_device *dev = link->priv;
+    local_info_t *lp = link->priv;
+    struct net_device *dev = &lp->dev;
 
     DEBUG(1, "fmvj18x_event(0x%06x)\n", event);
     
@@ -677,12 +660,12 @@ module_exit(exit_fmvj18x_cs);
 
 static void fjn_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-    struct net_device *dev = (struct net_device *)dev_id;
+    local_info_t *lp = dev_id;
+    struct net_device *dev = &lp->dev;
     ioaddr_t ioaddr;
-    local_info_t *lp;
     unsigned short tx_stat, rx_stat;
 
-    if (dev == NULL) {
+    if (lp == NULL) {
         printk(KERN_NOTICE "fjn_interrupt(): irq %d for "
               "unknown device.\n", irq);
         return;
@@ -693,7 +676,6 @@ static void fjn_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         return;
     }
     dev->interrupt = 1;
-    lp = (struct local_info_t *)dev->priv;
     ioaddr = dev->base_addr;
 
     /* avoid multiple interrupts */
@@ -710,12 +692,8 @@ static void fjn_interrupt(int irq, void *dev_id, struct pt_regs *regs)
     outb(tx_stat, ioaddr + TX_STATUS);
     outb(rx_stat, ioaddr + RX_STATUS);
     
-    if (fmvj18x_debug > 4) {
-        printk(KERN_DEBUG "%s: interrupt, rx_status %02x.\n",
-              dev->name, rx_stat);
-        printk(KERN_DEBUG "               tx_status %02x.\n",
-              tx_stat);
-    }
+    DEBUG(4, "%s: interrupt, rx_status %02x.\n", dev->name, rx_stat);
+    DEBUG(4, "               tx_status %02x.\n", tx_stat);
     
     if (rx_stat || (inb(ioaddr + RX_MODE) & F_BUF_EMP) == 0) {
        /* there is packet(s) in rx buffer */
@@ -738,11 +716,8 @@ static void fjn_interrupt(int irq, void *dev_id, struct pt_regs *regs)
            mark_bh(NET_BH);    /* Inform upper layers. */
        }
     }
-    if (fmvj18x_debug > 4) {
-        printk(KERN_DEBUG "%s: exiting interrupt,\n", dev->name);
-        printk(KERN_DEBUG "    tx_status %02x, rx_status %02x.\n",
-              tx_stat, rx_stat);
-    }
+    DEBUG(4, "%s: exiting interrupt,\n", dev->name);
+    DEBUG(4, "    tx_status %02x, rx_status %02x.\n", tx_stat, rx_stat);
 
     dev->interrupt = 0;
     outb(D_TX_INTR, ioaddr + TX_INTR);
@@ -802,15 +777,13 @@ static int fjn_start_xmit(struct sk_buff *skb, struct net_device *dev)
        unsigned char *buf = skb->data;
 
        if (length > ETH_FRAME_LEN) {
-           if (fmvj18x_debug)
-               printk(KERN_NOTICE "%s: Attempting to send a large packet"
-                      " (%d bytes).\n", dev->name, length);
+           printk(KERN_NOTICE "%s: Attempting to send a large packet"
+                  " (%d bytes).\n", dev->name, length);
            return 1;
        }
 
-       if (fmvj18x_debug > 4)
-           printk(KERN_DEBUG "%s: Transmitting a packet of length %lu.\n",
-                  dev->name, (unsigned long)skb->len);
+       DEBUG(4, "%s: Transmitting a packet of length %lu.\n",
+             dev->name, (unsigned long)skb->len);
        lp->stats.tx_bytes += skb->len;
 
        /* Disable both interrupts. */
@@ -864,9 +837,7 @@ static void fjn_reset(struct net_device *dev)
     ioaddr_t ioaddr = dev->base_addr;
     int i;
 
-    if (fmvj18x_debug > 4) {
-       printk(KERN_DEBUG "fjn_reset(%s) called.\n",dev->name);
-    }
+    DEBUG(4, "fjn_reset(%s) called.\n",dev->name);
 
     /* Power On chip and select bank 0 */
     outb(BANK_0, ioaddr + CONFIG_1);
@@ -885,12 +856,6 @@ static void fjn_reset(struct net_device *dev)
     for (i = 0; i < 6; i++) 
         outb(dev->dev_addr[i], ioaddr + NODE_ID + i);
 
-    if (fmvj18x_debug > 4) {
-       printk(KERN_DEBUG "node id: ");
-       for (i = 0; i < 6; i++) 
-           printk("%02X ",inb(ioaddr + NODE_ID + i));
-       printk("\n");
-    }
     /* Switch to bank 1 */
     outb(BANK_1, ioaddr + CONFIG_1);
 
@@ -948,16 +913,14 @@ static void fjn_rx(struct net_device *dev)
     ioaddr_t ioaddr = dev->base_addr;
     int boguscount = 10;       /* 5 -> 10: by agy 19940922 */
 
-    if (fmvj18x_debug > 4)
-        printk(KERN_DEBUG "%s: in rx_packet(), rx_status %02x.\n",
-               dev->name, inb(ioaddr + RX_STATUS));
+    DEBUG(4, "%s: in rx_packet(), rx_status %02x.\n",
+         dev->name, inb(ioaddr + RX_STATUS));
 
     while ((inb(ioaddr + RX_MODE) & F_BUF_EMP) == 0) {
        u_short status = inw(ioaddr + DATAPORT);
 
-       if (fmvj18x_debug > 4)
-           printk(KERN_DEBUG "%s: Rxing packet mode %02x status %04x.\n",
-                  dev->name, inb(ioaddr + RX_MODE), status);
+       DEBUG(4, "%s: Rxing packet mode %02x status %04x.\n",
+             dev->name, inb(ioaddr + RX_MODE), status);
 #ifndef final_version
        if (status == 0) {
            outb(F_SKP_PKT, ioaddr + RX_SKIP);
@@ -997,7 +960,8 @@ static void fjn_rx(struct net_device *dev)
                    (pkt_len + 1) >> 1);
            skb->protocol = eth_type_trans(skb, dev);
 
-           if (fmvj18x_debug > 5) {
+#ifdef PCMCIA_DEBUG
+           if (pc_debug > 5) {
                int i;
                printk(KERN_DEBUG "%s: Rxed packet of length %d: ",
                       dev->name, pkt_len);
@@ -1005,6 +969,7 @@ static void fjn_rx(struct net_device *dev)
                    printk(" %02x", skb->data[i]);
                printk(".\n");
            }
+#endif
 
            netif_rx(skb);
            lp->stats.rx_packets++;
@@ -1027,9 +992,9 @@ static void fjn_rx(struct net_device *dev)
            outb(F_SKP_PKT, ioaddr + RX_SKIP);
        }
 
-       if (fmvj18x_debug > 5 && i > 0)
-           printk(KERN_DEBUG "%s: Exint Rx packet with mode %02x after"
-                  " %d ticks.\n", dev->name, inb(ioaddr + RX_MODE), i);
+       if (i > 0)
+           DEBUG(5, "%s: Exint Rx packet with mode %02x after "
+                 "%d ticks.\n", dev->name, inb(ioaddr + RX_MODE), i);
     }
 */
 
@@ -1040,18 +1005,15 @@ static void fjn_rx(struct net_device *dev)
 
 static int fjn_config(struct net_device *dev, struct ifmap *map){
     return 0;
-} /* fjn_config */
+}
 
 static int fjn_open(struct net_device *dev)
 {
     struct local_info_t *lp = (struct local_info_t *)dev->priv;
-    dev_link_t *link;
+    dev_link_t *link = &lp->link;
 
-    if (fmvj18x_debug > 4)
-        printk(KERN_DEBUG "fjn_open('%s').\n", dev->name);
+    DEBUG(4, "fjn_open('%s').\n", dev->name);
 
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
     if (!DEV_OK(link))
        return -ENODEV;
     
@@ -1076,23 +1038,13 @@ static int fjn_open(struct net_device *dev)
 
 static int fjn_close(struct net_device *dev)
 {
-    ioaddr_t ioaddr = dev->base_addr;
     struct local_info_t *lp = (struct local_info_t *)dev->priv;
-    dev_link_t *link;
-
-    if (fmvj18x_debug > 4)
-        printk(KERN_DEBUG "fjn_open('%s').\n", dev->name);
-
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
-    if (link == NULL)
-       return -ENODEV;
-    
-    if (fmvj18x_debug > 2)
-       printk(KERN_DEBUG "%s: shutting down ethercard.\n", dev->name);
+    dev_link_t *link = &lp->link;
+    ioaddr_t ioaddr = dev->base_addr;
 
-    ((struct local_info_t *)dev->priv)->open_time = 0;
+    DEBUG(4, "fjn_close('%s').\n", dev->name);
 
+    lp->open_time = 0;
     dev->tbusy = 1;
     dev->start = 0;
 
@@ -1109,7 +1061,7 @@ static int fjn_close(struct net_device *dev)
 
     /* Set the ethernet adaptor disable IRQ */
     if( lp->cardtype != TDK ) 
-               outb(INTR_OFF, ioaddr + LAN_CTRL);
+       outb(INTR_OFF, ioaddr + LAN_CTRL);
 
     link->open--;
     dev->start = 0;
index 6ca0ce297d7ec393ce72b66771645d31a4749b17..74928fd27576b6bc3263baceeb4fa018e9ff249a 100644 (file)
@@ -302,6 +302,8 @@ struct site_survey {
 };     
    
 typedef struct netwave_private {
+    dev_link_t link;
+    struct net_device      dev;
     dev_node_t node;
     u_char     *ramBase;
     int        timeoutCounter;
@@ -440,7 +442,7 @@ static dev_link_t *netwave_attach(void)
     client_reg_t client_reg;
     dev_link_t *link;
     struct net_device *dev;
-    netwave_private *priv; 
+    netwave_private *priv;
     int i, ret;
     
     DEBUG(0, "netwave_attach()\n");
@@ -449,8 +451,11 @@ static dev_link_t *netwave_attach(void)
     netwave_flush_stale_links();
 
     /* Initialize the dev_link_t structure */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+    if (!priv) return NULL;
+    memset(priv, 0, sizeof(*priv));
+    link = &priv->link; dev = &priv->dev;
+    link->priv = dev->priv = priv;
     link->release.function = &netwave_release;
     link->release.data = (u_long)link;
        
@@ -478,15 +483,7 @@ static dev_link_t *netwave_attach(void)
     link->conf.ConfigIndex = 1;
     link->conf.Present = PRESENT_OPTION;
 
-    /* Allocate space for private device-specific data */
-    dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-    memset(dev, 0, sizeof(struct net_device));
-
-    dev->priv = kmalloc(sizeof(netwave_private), GFP_KERNEL);
-    memset(dev->priv, 0, sizeof(netwave_private));
-
     /* Set the watchdog timer */
-    priv = (netwave_private *) dev->priv;
     priv->watchdog.function = &netwave_watchdog;
     priv->watchdog.data = (unsigned long) dev;
 
@@ -502,12 +499,12 @@ static dev_link_t *netwave_attach(void)
     dev->do_ioctl = &netwave_ioctl;
 
     ether_setup(dev);
-    dev->name = ((struct netwave_private *)dev->priv)->node.dev_name;
+    dev->name = priv->node.dev_name;
     dev->init = &netwave_init;
     dev->open = &netwave_open;
     dev->stop = &netwave_close;
     dev->tbusy = 1;
-    link->priv = link->irq.Instance = dev;
+    link->irq.Instance = dev;
     
     /* Register with Card Services */
     link->next = dev_list;
@@ -541,6 +538,7 @@ static dev_link_t *netwave_attach(void)
  */
 static void netwave_detach(dev_link_t *link)
 {
+    netwave_private *priv = link->priv;
     dev_link_t **linkp;
     long flags;
 
@@ -587,16 +585,9 @@ static void netwave_detach(dev_link_t *link)
 
     /* Unlink device structure, free pieces */
     *linkp = link->next;
-    if (link->priv) {
-       struct net_device *dev = link->priv;
-       if (link->dev != NULL)
-         unregister_netdev(dev);
-       link->dev = NULL;
-       if (dev->priv)
-           kfree(dev->priv);
-       kfree(link->priv);
-    }
-    kfree(link);
+    if (link->dev)
+       unregister_netdev(&priv->dev);
+    kfree(priv);
     
 } /* netwave_detach */
 
@@ -633,8 +624,8 @@ static void netwave_flush_stale_links(void)
  *
  */
 static int netwave_ioctl(struct net_device *dev, /* ioctl device */
-                                                struct ifreq *rq,       /* Data passed */
-                                                int    cmd)         /* Ioctl number */
+                        struct ifreq *rq,       /* Data passed */
+                        int    cmd)         /* Ioctl number */
 {
     unsigned long flags;
     int                        ret = 0;
@@ -839,20 +830,16 @@ static int netwave_ioctl(struct net_device *dev, /* ioctl device */
 while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
 
 static void netwave_pcmcia_config(dev_link_t *link) {
-    client_handle_t handle;
+    client_handle_t handle = link->handle;
+    netwave_private *priv = link->priv;
+    struct net_device *dev = &priv->dev;
     tuple_t tuple;
     cisparse_t parse;
-    struct net_device *dev;
     int i, j, last_ret, last_fn;
     u_char buf[64];
     win_req_t req;
     memreq_t mem;
     u_char *ramBase = NULL;
-    /*    modwin_t mod;
-         short iobase, *phys_addr;
-         */  
-    handle = link->handle;
-    dev = link->priv;
 
     DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
 
@@ -969,7 +956,7 @@ failed:
  */
 static void netwave_release(u_long arg) {
     dev_link_t *link = (dev_link_t *)arg;
-    struct net_device *dev = link->priv;
+    netwave_private *priv = link->priv;
 
     DEBUG(0, "netwave_release(0x%p)\n", link);
 
@@ -986,7 +973,7 @@ static void netwave_release(u_long arg) {
        
     /* Don't bother checking to see if these succeed or not */
     if (link->win) {
-       iounmap(((netwave_private *)dev->priv)->ramBase);
+       iounmap(priv->ramBase);
        CardServices(ReleaseWindow, link->win);
     }
     CardServices(ReleaseConfiguration, link->handle);
@@ -1014,7 +1001,8 @@ static void netwave_release(u_long arg) {
 static int netwave_event(event_t event, int priority,
                         event_callback_args_t *args) {
     dev_link_t *link = args->client_data;
-    struct net_device *dev = link->priv;
+    netwave_private *priv = link->priv;
+    struct net_device *dev = &priv->dev;
        
     DEBUG(1, "netwave_event(0x%06x)\n", event);
   
@@ -1027,7 +1015,6 @@ static int netwave_event(event_t event, int priority,
        link->state &= ~DEV_PRESENT;
        if (link->state & DEV_CONFIG) {
            dev->tbusy = 1; dev->start = 0;
-           /* ((netwave_private *)link->priv)->block = 1; */
            link->release.expires = jiffies + 5;
            add_timer(&link->release);
        }
@@ -1312,24 +1299,18 @@ static void netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs) {
     ioaddr_t iobase;
     u_char *ramBase;
     struct net_device *dev = (struct net_device *)dev_id;
-    struct netwave_private *priv;
+    struct netwave_private *priv = dev->priv;
+    dev_link_t *link = &priv->link;
     int i;
-    dev_link_t *link;
-    
-       if ((dev == NULL) | (!dev->start))
-               return;
     
-    priv = (netwave_private *)dev->priv;
+    if ((dev == NULL) | (!dev->start))
+       return;
     
     if (dev->interrupt) {
        printk("%s: re-entering the interrupt handler.\n", dev->name);
        return;
     }
     dev->interrupt = 1;
-       
-    /* Find the correct dev_link_t */
-    for (link = dev_list; NULL != link; link = link->next)
-       if (dev == link->priv) break;
     
     iobase = dev->base_addr;
     ramBase = priv->ramBase;
@@ -1592,12 +1573,10 @@ static int netwave_rx(struct net_device *dev) {
 }
 
 static int netwave_open(struct net_device *dev) {
-    dev_link_t *link;
+    netwave_private *priv = dev->priv;
+    dev_link_t *link = &priv->link;
 
     DEBUG(1, "netwave_open: starting.\n");
-
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
     
     if (!DEV_OK(link))
        return -ENODEV;
@@ -1612,16 +1591,11 @@ static int netwave_open(struct net_device *dev) {
 }
 
 static int netwave_close(struct net_device *dev) {
-    dev_link_t *link;
-    netwave_private *priv = (netwave_private *) dev->priv;
+    netwave_private *priv = (netwave_private *)dev->priv;
+    dev_link_t *link = &priv->link;
 
     DEBUG(1, "netwave_close: finishing.\n");
 
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
-    if (link == NULL)
-       return -ENODEV;
-       
     /* If watchdog was activated, kill it ! */
     del_timer(&priv->watchdog);
        
index 2dd6a369b437f7efe09fca79b90b81a201424be3..2fb3772a55a48700d145b523b3210d4c6ec0393a 100644 (file)
@@ -312,61 +312,63 @@ Type Definitions
 ---------------------------------------------------------------------------- */
 
 typedef struct _mace_statistics {
-  /* MACE_XMTFS */
-  int xmtsv;
-  int uflo;
-  int lcol;
-  int more;
-  int one;
-  int defer;
-  int lcar;
-  int rtry;
-
-  /* MACE_XMTRC */
-  int exdef;
-  int xmtrc;
-
-  /* RFS1--Receive Status (RCVSTS) */
-  int oflo;
-  int clsn;
-  int fram;
-  int fcs;
-
-  /* RFS2--Runt Packet Count (RNTPC) */
-  int rfs_rntpc;
-
-  /* RFS3--Receive Collision Count (RCVCC) */
-  int rfs_rcvcc;
-
-  /* MACE_IR */
-  int jab;
-  int babl;
-  int cerr;
-  int rcvcco;
-  int rntpco;
-  int mpco;
-
-  /* MACE_MPC */
-  int mpc;
-
-  /* MACE_RNTPC */
-  int rntpc;
-
-  /* MACE_RCVCC */
-  int rcvcc;
+    /* MACE_XMTFS */
+    int xmtsv;
+    int uflo;
+    int lcol;
+    int more;
+    int one;
+    int defer;
+    int lcar;
+    int rtry;
+
+    /* MACE_XMTRC */
+    int exdef;
+    int xmtrc;
+
+    /* RFS1--Receive Status (RCVSTS) */
+    int oflo;
+    int clsn;
+    int fram;
+    int fcs;
+
+    /* RFS2--Runt Packet Count (RNTPC) */
+    int rfs_rntpc;
+
+    /* RFS3--Receive Collision Count (RCVCC) */
+    int rfs_rcvcc;
+
+    /* MACE_IR */
+    int jab;
+    int babl;
+    int cerr;
+    int rcvcco;
+    int rntpco;
+    int mpco;
+
+    /* MACE_MPC */
+    int mpc;
+
+    /* MACE_RNTPC */
+    int rntpc;
+
+    /* MACE_RCVCC */
+    int rcvcc;
 } mace_statistics;
 
 typedef struct _mace_private {
-  dev_node_t node;
-  struct net_device_stats linux_stats; /* Linux statistics counters */
-  mace_statistics mace_stats; /* MACE chip statistics counters */
-
-  /* restore_multicast_list() state variables */
-  int multicast_ladrf[MACE_LADRF_LEN]; /* Logical address filter */
-  int multicast_num_addrs;
-
-  char tx_free_frames; /* Number of free transmit frame buffers */
-  char tx_irq_disabled; /* MACE TX interrupt disabled */
+    dev_link_t link;
+    struct net_device dev;
+    dev_node_t node;
+    struct net_device_stats linux_stats; /* Linux statistics counters */
+    mace_statistics mace_stats; /* MACE chip statistics counters */
+
+    /* restore_multicast_list() state variables */
+    int multicast_ladrf[MACE_LADRF_LEN]; /* Logical address filter */
+    int multicast_num_addrs;
+
+    char tx_free_frames; /* Number of free transmit frame buffers */
+    char tx_irq_disabled; /* MACE TX interrupt disabled */
 } mace_private;
 
 /* ----------------------------------------------------------------------------
@@ -384,9 +386,7 @@ static dev_info_t dev_info="nmclan_cs";
 static dev_link_t *dev_list=NULL;
 
 static char *if_names[]={
-  "Auto",
-  "10baseT",
-  "BNC",
+    "Auto", "10baseT", "BNC",
 };
 
 #ifdef PCMCIA_DEBUG
@@ -403,12 +403,8 @@ Parameters
        'insmod'.
 ---------------------------------------------------------------------------- */
 
-static int if_port=0; /* default=auto */
-  /*
-   * 0=auto
-   * 1=10base-T (twisted pair)
-   * 2=10base-2 (BNC)
-   */
+/* 0=auto, 1=10baseT, 2 = 10base2, default=auto */
+static int if_port=0;
 
 /* Bit map of interrupts to choose from */
 static u_int irq_mask = 0xdeb8;
@@ -425,7 +421,7 @@ Function Prototypes
 static void nmclan_config(dev_link_t *link);
 static void nmclan_release(u_long arg);
 static int nmclan_event(event_t event, int priority,
-                      event_callback_args_t *args);
+                       event_callback_args_t *args);
 
 static void nmclan_reset(struct net_device *dev);
 static int mace_config(struct net_device *dev, struct ifmap *map);
@@ -473,10 +469,11 @@ nmclan_init
        We never need to do anything when a nmclan device is "initialized"
        by the net software, because we only register already-found cards.
 ---------------------------------------------------------------------------- */
+
 static int nmclan_init(struct net_device *dev)
 {
-  return 0;
-} /* nmclan_init */
+    return 0;
+}
 
 /* ----------------------------------------------------------------------------
 nmclan_attach
@@ -484,79 +481,78 @@ nmclan_attach
        structures for one device.  The device is registered with Card
        Services.
 ---------------------------------------------------------------------------- */
+
 static dev_link_t *nmclan_attach(void)
 {
-  client_reg_t client_reg;
-  dev_link_t *link;
-  struct net_device *dev;
-  int i, ret;
-
-  DEBUG(0, "nmclan_attach()\n");
-  DEBUG(1, "%s\n", rcsid);
-  flush_stale_links();
-
-  /* Create new ethernet device */
-  link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-  memset(link, 0, sizeof(struct dev_link_t));
-  link->release.function = &nmclan_release;
-  link->release.data = (u_long)link;
-  link->io.NumPorts1 = 32;
-  link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-  link->io.IOAddrLines = 5;
-  link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
-  link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
-  if (irq_list[0] == -1)
-    link->irq.IRQInfo2 = irq_mask;
-  else
-    for (i = 0; i < 4; i++)
-      link->irq.IRQInfo2 |= 1 << irq_list[i];
-  link->irq.Handler = &mace_interrupt;
-  link->conf.Attributes = CONF_ENABLE_IRQ;
-  link->conf.Vcc = 50;
-  link->conf.IntType = INT_MEMORY_AND_IO;
-  link->conf.ConfigIndex = 1;
-  link->conf.Present = PRESENT_OPTION;
-
-  dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-  memset(dev, 0, sizeof(struct net_device));
-
-  /* Allocate private data area for this device. */
-  dev->priv = kmalloc(sizeof(mace_private), GFP_KERNEL);
-  memset(dev->priv, 0, sizeof(mace_private));
-  ((mace_private *)dev->priv)->tx_free_frames=AM2150_MAX_TX_FRAMES;
-
-  dev->hard_start_xmit = &mace_start_xmit;
-  dev->set_config = &mace_config;
-  dev->get_stats = &mace_get_stats;
-  dev->set_multicast_list = &set_multicast_list;
-  ether_setup(dev);
-  dev->name = ((mace_private *)dev->priv)->node.dev_name;
-  dev->init = &nmclan_init;
-  dev->open = &mace_open;
-  dev->stop = &mace_close;
-  dev->tbusy = 0xFF;
-  link->priv = link->irq.Instance = dev;
-
-  /* Register with Card Services */
-  link->next = dev_list;
-  dev_list = link;
-  client_reg.dev_info = &dev_info;
-  client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
-  client_reg.EventMask =
-    CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
-    CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
-    CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
-  client_reg.event_handler = &nmclan_event;
-  client_reg.Version = 0x0210;
-  client_reg.event_callback_args.client_data = link;
-  ret = CardServices(RegisterClient, &link->handle, &client_reg);
-  if (ret != 0) {
-    cs_error(link->handle, RegisterClient, ret);
-    nmclan_detach(link);
-    return NULL;
-  }
+    mace_private *lp;
+    dev_link_t *link;
+    struct net_device *dev;
+    client_reg_t client_reg;
+    int i, ret;
+
+    DEBUG(0, "nmclan_attach()\n");
+    DEBUG(1, "%s\n", rcsid);
+    flush_stale_links();
+
+    /* Create new ethernet device */
+    lp = kmalloc(sizeof(*lp), GFP_KERNEL);
+    if (!lp) return NULL;
+    memset(lp, 0, sizeof(*lp));
+    link = &lp->link; dev = &lp->dev;
+    link->priv = dev->priv = link->irq.Instance = lp;
+
+    link->release.function = &nmclan_release;
+    link->release.data = (u_long)link;
+    link->io.NumPorts1 = 32;
+    link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+    link->io.IOAddrLines = 5;
+    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+    link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
+    if (irq_list[0] == -1)
+       link->irq.IRQInfo2 = irq_mask;
+    else
+       for (i = 0; i < 4; i++)
+           link->irq.IRQInfo2 |= 1 << irq_list[i];
+    link->irq.Handler = &mace_interrupt;
+    link->conf.Attributes = CONF_ENABLE_IRQ;
+    link->conf.Vcc = 50;
+    link->conf.IntType = INT_MEMORY_AND_IO;
+    link->conf.ConfigIndex = 1;
+    link->conf.Present = PRESENT_OPTION;
+
+    lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
+
+    dev->hard_start_xmit = &mace_start_xmit;
+    dev->set_config = &mace_config;
+    dev->get_stats = &mace_get_stats;
+    dev->set_multicast_list = &set_multicast_list;
+    ether_setup(dev);
+    dev->name = lp->node.dev_name;
+    dev->init = &nmclan_init;
+    dev->open = &mace_open;
+    dev->stop = &mace_close;
+    dev->tbusy = 0xFF;
+
+    /* Register with Card Services */
+    link->next = dev_list;
+    dev_list = link;
+    client_reg.dev_info = &dev_info;
+    client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
+    client_reg.EventMask =
+       CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
+       CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
+       CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
+    client_reg.event_handler = &nmclan_event;
+    client_reg.Version = 0x0210;
+    client_reg.event_callback_args.client_data = link;
+    ret = CardServices(RegisterClient, &link->handle, &client_reg);
+    if (ret != 0) {
+       cs_error(link->handle, RegisterClient, ret);
+       nmclan_detach(link);
+       return NULL;
+    }
 
-  return link;
+    return link;
 } /* nmclan_attach */
 
 /* ----------------------------------------------------------------------------
@@ -566,40 +562,36 @@ nmclan_detach
        structures are freed.  Otherwise, the structures will be freed
        when the device is released.
 ---------------------------------------------------------------------------- */
+
 static void nmclan_detach(dev_link_t *link)
 {
-  dev_link_t **linkp;
-
-  DEBUG(0, "nmclan_detach(0x%p)\n", link);
-
-  /* Locate device structure */
-  for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
-    if (*linkp == link) break;
-  if (*linkp == NULL)
-    return;
-
-  if (link->state & DEV_CONFIG) {
-    nmclan_release((u_long)link);
-    if (link->state & DEV_STALE_CONFIG) {
-      link->state |= DEV_STALE_LINK;
-      return;
+    mace_private *lp = link->priv;
+    dev_link_t **linkp;
+
+    DEBUG(0, "nmclan_detach(0x%p)\n", link);
+
+    /* Locate device structure */
+    for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
+       if (*linkp == link) break;
+    if (*linkp == NULL)
+       return;
+
+    if (link->state & DEV_CONFIG) {
+       nmclan_release((u_long)link);
+       if (link->state & DEV_STALE_CONFIG) {
+           link->state |= DEV_STALE_LINK;
+           return;
+       }
     }
-  }
 
-  if (link->handle)
-    CardServices(DeregisterClient, link->handle);
-
-  /* Unlink device structure, free bits */
-  *linkp = link->next;
-  if (link->priv) {
-    struct net_device *dev = link->priv;
-    if (link->dev != NULL)
-      unregister_netdev(dev);
-    if (dev->priv)
-      kfree(dev->priv);
-    kfree(link->priv);
-  }
-  kfree(link);
+    if (link->handle)
+       CardServices(DeregisterClient, link->handle);
+
+    /* Unlink device structure, free bits */
+    *linkp = link->next;
+    if (link->dev)
+       unregister_netdev(&lp->dev);
+    kfree(lp);
 
 } /* nmclan_detach */
 
@@ -731,18 +723,14 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
 
 static void nmclan_config(dev_link_t *link)
 {
-  client_handle_t handle;
-  struct net_device *dev;
+  client_handle_t handle = link->handle;
+  mace_private *lp = link->priv;
+  struct net_device *dev = &lp->dev;
   tuple_t tuple;
   cisparse_t parse;
   u_char buf[64];
   int i, last_ret, last_fn;
   ioaddr_t ioaddr;
-  u_short *phys_addr;
-
-  handle = link->handle;
-  dev = link->priv;
-  phys_addr = (u_short *)dev->dev_addr;
 
   DEBUG(0, "nmclan_config(0x%p)\n", link);
 
@@ -770,7 +758,7 @@ static void nmclan_config(dev_link_t *link)
     printk(KERN_NOTICE "nmclan_cs: register_netdev() failed\n");
     goto failed;
   }
-  
+
   ioaddr = dev->base_addr;
 
   /* Read the ethernet address from the CIS. */
@@ -807,9 +795,9 @@ static void nmclan_config(dev_link_t *link)
   else
     printk(KERN_NOTICE "nmclan_cs: invalid if_port requested\n");
 
-  link->dev = &((mace_private *)dev->priv)->node;
+  link->dev = &lp->node;
   link->state &= ~DEV_CONFIG_PENDING;
-  
+
   printk(KERN_INFO "%s: nmclan: port %#3lx, irq %d, %s port, hw_addr ",
         dev->name, dev->base_addr, dev->irq, if_names[dev->if_port]);
   for (i = 0; i < 6; i++)
@@ -821,7 +809,7 @@ cs_failed:
 failed:
     nmclan_release((u_long)link);
     return;
-    
+
 } /* nmclan_config */
 
 /* ----------------------------------------------------------------------------
@@ -862,10 +850,11 @@ static int nmclan_event(event_t event, int priority,
                       event_callback_args_t *args)
 {
   dev_link_t *link = args->client_data;
-  struct net_device *dev = link->priv;
+  mace_private *lp = link->priv;
+  struct net_device *dev = &lp->dev;
 
   DEBUG(1, "nmclan_event(0x%06x)\n", event);
-    
+
   switch (event) {
     case CS_EVENT_CARD_REMOVAL:
       link->state &= ~DEV_PRESENT;
@@ -918,20 +907,13 @@ nmclan_reset
 ---------------------------------------------------------------------------- */
 static void nmclan_reset(struct net_device *dev)
 {
+  mace_private *lp = dev->priv;
 
 #if RESET_XILINX
-  dev_link_t *link;
+  dev_link_t *link = &lp->link;
   conf_reg_t reg;
   u_long OrigCorValue; 
 
-  /* Find our client handle. */
-  for (link = dev_list; link; link = link->next)
-    if (link->priv == dev) break;
-  if (link == NULL) {
-    printk(KERN_NOTICE "nmclan_cs: bad device pointer!\n");
-    return;
-  }
-
   /* Save original COR value */
   reg.Function = 0;
   reg.Action = CS_READ;
@@ -953,13 +935,13 @@ static void nmclan_reset(struct net_device *dev)
   reg.Value = COR_LEVEL_REQ | (OrigCorValue & COR_CONFIG_MASK);
   CardServices(AccessConfigurationRegister, link->handle, &reg);
   /* Xilinx is now completely reset along with the MACE chip. */
-  ((mace_private *)dev->priv)->tx_free_frames=AM2150_MAX_TX_FRAMES;
+  lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
 
 #endif /* #if RESET_XILINX */
 
   /* Xilinx is now completely reset along with the MACE chip. */
-  ((mace_private *)dev->priv)->tx_free_frames=AM2150_MAX_TX_FRAMES;
-  
+  lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
+
   /* Reinitialize the MACE chip for operation. */
   mace_init(dev->base_addr, dev->dev_addr);
   mace_write(dev->base_addr, MACE_IMR, MACE_IMR_DEFAULT);
@@ -981,9 +963,8 @@ static int mace_config(struct net_device *dev, struct ifmap *map)
       dev->if_port = map->port;
       printk(KERN_INFO "%s: switched to %s port\n", dev->name,
             if_names[dev->if_port]);
-    }
-  else
-    return -EINVAL;
+    } else
+      return -EINVAL;
   }
   return 0;
 } /* mace_config */
@@ -995,10 +976,9 @@ mace_open
 static int mace_open(struct net_device *dev)
 {
   ioaddr_t ioaddr = dev->base_addr;
-  dev_link_t *link;
+  mace_private *lp = dev->priv;
+  dev_link_t *link = &lp->link;
 
-  for (link = dev_list; link; link = link->next)
-    if (link->priv == dev) break;
   if (!DEV_OK(link))
     return -ENODEV;
 
@@ -1023,15 +1003,11 @@ mace_close
 static int mace_close(struct net_device *dev)
 {
   ioaddr_t ioaddr = dev->base_addr;
-  dev_link_t *link;
-
-  for (link = dev_list; link; link = link->next)
-    if (link->priv == dev) break;
-  if (link == NULL)
-    return -ENODEV;
+  mace_private *lp = dev->priv;
+  dev_link_t *link = &lp->link;
 
   DEBUG(2, "%s: shutting down ethercard.\n", dev->name);
-  
+
   /* Mask off all interrupts from the MACE chip. */
   outb(0xFF, ioaddr + AM2150_MACE_BASE + MACE_IMR);
 
@@ -1062,7 +1038,7 @@ static int mace_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
   mace_private *lp = (mace_private *)dev->priv;
   ioaddr_t ioaddr = dev->base_addr;
-  dev_link_t *link;
+  dev_link_t *link = &lp->link;
 
 #if TIMEOUT_TX
   /* Transmitter timeout. */
@@ -1074,10 +1050,7 @@ static int mace_start_xmit(struct sk_buff *skb, struct net_device *dev)
     printk(KERN_NOTICE "%s: transmit timed out -- ", dev->name);
 #if RESET_ON_TIMEOUT
     printk("resetting card\n");
-    for (link = dev_list; link; link = link->next)
-      if (link->priv == dev) break;
-    if (link)
-      CardServices(ResetCard, link->handle);
+    CardServices(ResetCard, link->handle);
 #else /* #if RESET_ON_TIMEOUT */
     printk("NOT resetting card\n");
 #endif /* #if RESET_ON_TIMEOUT */
@@ -1091,7 +1064,7 @@ static int mace_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
   DEBUG(3, "%s: mace_start_xmit(length = %ld) called.\n",
        dev->name, (long)skb->len);
-  
+
   /* Avoid timer-based retransmission conflicts. */
   if (test_and_set_bit(TBUSY_UNSPECIFIED, (void*)&dev->tbusy) != 0) {
     printk(KERN_NOTICE "%s: transmitter access conflict.\n",
@@ -1146,7 +1119,7 @@ static int mace_start_xmit(struct sk_buff *skb, struct net_device *dev)
 #endif /* #if (!TX_INTERRUPTABLE) */
 
   dev_kfree_skb(skb);
-    
+
   return 0;
 } /* mace_start_xmit */
 
@@ -1156,8 +1129,8 @@ mace_interrupt
 ---------------------------------------------------------------------------- */
 static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-  struct net_device *dev = (struct net_device *)dev_id;
-  mace_private *lp = (mace_private *)dev->priv;
+  mace_private *lp = (mace_private *)dev_id;
+  struct net_device *dev = &lp->dev;
   ioaddr_t ioaddr = dev->base_addr;
   int status;
   int IntrCnt = MACE_MAX_IR_ITERATIONS;
@@ -1169,7 +1142,6 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
   }
 
   if (dev->interrupt || lp->tx_irq_disabled) {
-    sti();
     printk(
       (lp->tx_irq_disabled?
        KERN_NOTICE "%s: Interrupt with tx_irq_disabled "
@@ -1184,7 +1156,6 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
     return;
   }
   dev->interrupt = 1;
-  sti();
 
   if (dev->start == 0) {
     DEBUG(2, "%s: interrupt from dead card\n", dev->name);
@@ -1194,7 +1165,7 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
   do {
     /* WARNING: MACE_IR is a READ/CLEAR port! */
     status = inb(ioaddr + AM2150_MACE_BASE + MACE_IR);
+
     DEBUG(3, "mace_interrupt: irq 0x%X status 0x%X.\n", irq, status);
 
     if (status & MACE_IR_RCVINT) {
@@ -1346,9 +1317,9 @@ static int mace_rx(struct net_device *dev, unsigned char RxCnt)
 
       DEBUG(3, "    receiving packet size 0x%X rx_status"
            " 0x%X.\n", pkt_len, rx_status);
-      
+
       skb = dev_alloc_skb(pkt_len+2);
-      
+
       if (skb != NULL) {
        skb->dev = dev;
 
@@ -1425,7 +1396,7 @@ static void pr_mace_stats(mace_statistics *pstats)
   /* MACE_XMTRC */
   DEBUG(2, " exdef=%-7d             xmtrc=%d\n",
        pstats->exdef, pstats->xmtrc);
-  
+
   /* RFS1--Receive Status (RCVSTS) */
   DEBUG(2, " oflo=%-7d              clsn=%d\n",
        pstats->oflo, pstats->clsn);
@@ -1472,7 +1443,7 @@ update_stats
 static void update_stats(ioaddr_t ioaddr, struct net_device *dev)
 {
   mace_private *lp = (mace_private *)dev->priv;
-    
+
   lp->mace_stats.rcvcc += mace_read(ioaddr, MACE_RCVCC);
   lp->mace_stats.rntpc += mace_read(ioaddr, MACE_RNTPC);
   lp->mace_stats.mpc += mace_read(ioaddr, MACE_MPC);
@@ -1711,7 +1682,7 @@ static void restore_multicast_list(struct net_device *dev)
 
   DEBUG(2, "%s: restoring Rx mode to %d addresses.\n", dev->name,
        ((mace_private *)(dev->priv))->multicast_num_addrs);
-  
+
   if (dev->flags & IFF_PROMISC) {
     /* Promiscuous mode: receive all packets */
     mace_write(ioaddr, MACE_UTR, MACE_UTR_LOOP_EXTERNAL);
@@ -1768,10 +1739,10 @@ exit_nmclan_cs
 
 static void __exit exit_nmclan_cs(void)
 {
-  DEBUG(0, "nmclan_cs: unloading\n");
-  unregister_pccard_driver(&dev_info);
-  while (dev_list != NULL)
-    nmclan_detach(dev_list);
+    DEBUG(0, "nmclan_cs: unloading\n");
+    unregister_pccard_driver(&dev_info);
+    while (dev_list != NULL)
+       nmclan_detach(dev_list);
 }
 
 module_init(init_nmclan_cs);
index cefdf91be461f622eee41211bedcf7d728d71b0d..575a912718fbe646f8311365e4ccbffa4d8f0a05 100644 (file)
@@ -11,7 +11,7 @@
 
     Copyright (C) 1999 David A. Hinds -- dhinds@pcmcia.sourceforge.org
 
-    pcnet_cs.c 1.106 1999/11/09 21:53:13
+    pcnet_cs.c 1.110 1999/12/06 21:39:18
     
     The network driver code is based on Donald Becker's NE2000 code:
 
@@ -72,7 +72,7 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"pcnet_cs.c 1.106 1999/11/09 21:53:13 (David Hinds)";
+"pcnet_cs.c 1.110 1999/12/06 21:39:18 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -122,26 +122,21 @@ static void pcnet_config(dev_link_t *link);
 static void pcnet_release(u_long arg);
 static int pcnet_event(event_t event, int priority,
                       event_callback_args_t *args);
-
 static int pcnet_open(struct net_device *dev);
 static int pcnet_close(struct net_device *dev);
 static void ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs);
 static void ei_watchdog(u_long arg);
-
 static void pcnet_reset_8390(struct net_device *dev);
-
 static int set_config(struct net_device *dev, struct ifmap *map);
-
 static int setup_shmem_window(dev_link_t *link, int start_pg,
                              int stop_pg, int cm_offset);
 static int setup_dma_config(dev_link_t *link, int start_pg,
                            int stop_pg);
 
-static dev_info_t dev_info = "pcnet_cs";
-
 static dev_link_t *pcnet_attach(void);
 static void pcnet_detach(dev_link_t *);
 
+static dev_info_t dev_info = "pcnet_cs";
 static dev_link_t *dev_list;
 
 /*====================================================================*/
@@ -215,7 +210,8 @@ static hw_info_t hw_info[] = {
     { /* Socket EA */ 0x4000, 0x00, 0xc0, 0x1b,
       DELAY_OUTPUT | HAS_MISC_REG | USE_BIG_BUF },
     { /* SuperSocket RE450T */ 0x0110, 0x00, 0xe0, 0x98, 0 },
-    { /* Volktek NPL-402CT */ 0x0060, 0x00, 0x40, 0x05, 0 }
+    { /* Volktek NPL-402CT */ 0x0060, 0x00, 0x40, 0x05, 0 },
+    { /* NEC PC-9801N-J12 */ 0x0ff0, 0x00, 0x00, 0x4c, 0 }
 };
 
 #define NR_INFO                (sizeof(hw_info)/sizeof(hw_info_t))
@@ -226,12 +222,13 @@ static hw_info_t dl_fast_info =
 { /* D-Link EtherFast */ 0x00, 0x00, 0x00, 0x00, IS_DL10019A };
 
 typedef struct pcnet_dev_t {
-    struct net_device  dev;
+    struct net_device  dev; /* so &dev == &pcnet_dev_t */
+    dev_link_t         link;
     dev_node_t         node;
     u_long             flags;
     caddr_t            base;
     struct timer_list  watchdog;
-    int                        stale, link;
+    int                        stale, state;
     u_short            fast_poll;
 } pcnet_dev_t;
 
@@ -283,18 +280,22 @@ static int pcnet_init(struct net_device *dev)
 
 static dev_link_t *pcnet_attach(void)
 {
-    client_reg_t client_reg;
-    dev_link_t *link;
     pcnet_dev_t *info;
+    dev_link_t *link;
     struct net_device *dev;
+    client_reg_t client_reg;
     int i, ret;
 
     DEBUG(0, "pcnet_attach()\n");
     flush_stale_links();
 
     /* Create new ethernet device */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    info = kmalloc(sizeof(*info), GFP_KERNEL);
+    if (!info) return NULL;
+    memset(info, 0, sizeof(*info));
+    link = &info->link; dev = &info->dev;
+    link->priv = info;
+    
     link->release.function = &pcnet_release;
     link->release.data = (u_long)link;
     link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
@@ -308,9 +309,6 @@ static dev_link_t *pcnet_attach(void)
     link->conf.Vcc = 50;
     link->conf.IntType = INT_MEMORY_AND_IO;
 
-    info = kmalloc(sizeof(struct pcnet_dev_t), GFP_KERNEL);
-    memset(info, 0, sizeof(struct pcnet_dev_t));
-    dev = &info->dev;
     ethdev_init(dev);
     dev->name = info->node.dev_name;
     dev->init = &pcnet_init;
@@ -318,7 +316,6 @@ static dev_link_t *pcnet_attach(void)
     dev->stop = &pcnet_close;
     dev->set_config = &set_config;
     dev->tbusy = 1;
-    link->priv = info;
 
     /* Register with Card Services */
     link->next = dev_list;
@@ -353,6 +350,7 @@ static dev_link_t *pcnet_attach(void)
 
 static void pcnet_detach(dev_link_t *link)
 {
+    pcnet_dev_t *info = link->priv;
     dev_link_t **linkp;
     long flags;
 
@@ -385,15 +383,9 @@ static void pcnet_detach(dev_link_t *link)
 
     /* Unlink device structure, free bits */
     *linkp = link->next;
-    if (link->priv) {
-       struct net_device *dev = link->priv;
-       if (link->dev != NULL)
-           unregister_netdev(dev);
-       if (dev->priv)
-           kfree_s(dev->priv, sizeof(struct ei_device));
-       kfree_s(dev, sizeof(struct pcnet_dev_t));
-    }
-    kfree_s(link, sizeof(struct dev_link_t));
+    if (link->dev)
+       unregister_netdev(&info->dev);
+    kfree(info);
 
 } /* pcnet_detach */
 
@@ -595,20 +587,16 @@ static int try_io_port(dev_link_t *link)
 
 static void pcnet_config(dev_link_t *link)
 {
-    client_handle_t handle;
+    client_handle_t handle = link->handle;
+    pcnet_dev_t *info = link->priv;
+    struct net_device *dev = &info->dev;
     tuple_t tuple;
     cisparse_t parse;
-    pcnet_dev_t *info;
-    struct net_device *dev;
     int i, last_ret, last_fn, start_pg, stop_pg, cm_offset;
     int manfid = 0, prodid = 0, has_shmem = 0;
     u_short buf[64];
     hw_info_t *hw_info;
 
-    handle = link->handle;
-    info = link->priv;
-    dev = &info->dev;
-
     DEBUG(0, "pcnet_config(0x%p)\n", link);
 
     tuple.Attributes = 0;
@@ -881,12 +869,10 @@ static void set_misc_reg(struct net_device *dev)
 static int pcnet_open(struct net_device *dev)
 {
     pcnet_dev_t *info = (pcnet_dev_t *)dev;
-    dev_link_t *link;
+    dev_link_t *link = &info->link;
     
     DEBUG(2, "pcnet_open('%s')\n", dev->name);
 
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
     if (!DEV_OK(link))
        return -ENODEV;
 
@@ -897,7 +883,7 @@ static int pcnet_open(struct net_device *dev)
     request_irq(dev->irq, ei_irq_wrapper, SA_SHIRQ, dev_info, dev);
 
     /* Start by assuming the link is bad */
-    info->link = 1;
+    info->state = 1;
     info->watchdog.function = &ei_watchdog;
     info->watchdog.data = (u_long)info;
     info->watchdog.expires = jiffies + HZ;
@@ -910,18 +896,15 @@ static int pcnet_open(struct net_device *dev)
 
 static int pcnet_close(struct net_device *dev)
 {
-    dev_link_t *link;
+    pcnet_dev_t *info = (pcnet_dev_t *)dev;
+    dev_link_t *link = &info->link;
 
     DEBUG(2, "pcnet_close('%s')\n", dev->name);
 
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
-    if (link == NULL)
-       return -ENODEV;
     free_irq(dev->irq, dev);
     
     link->open--; dev->start = 0;
-    del_timer(&((pcnet_dev_t *)dev)->watchdog);
+    del_timer(&info->watchdog);
     if (link->state & DEV_STALE_CONFIG) {
        link->release.expires = jiffies + HZ/20;
        link->state |= DEV_RELEASE_PENDING;
@@ -1016,12 +999,12 @@ static void ei_watchdog(u_long arg)
 
     if (info->flags & IS_DL10019A) {
        int state = inb(dev->base_addr+0x1c) & 0x01;
-       if (state != info->link) {
+       if (state != info->state) {
            printk(KERN_INFO "%s: %s link beat\n", dev->name,
                   (state) ? "lost" : "found");
            if (!state)
                NS8390_init(dev, 1);
-           info->link = state;
+           info->state = state;
        }
     }
 
index 5c7c5e4df6cd22a1e3265dbbe0da0f194c9d8921..4a58706f6efc92aba3a5b47a30a37d51bc2335a7 100644 (file)
@@ -8,7 +8,7 @@
 
     Copyright (C) 1999 David A. Hinds -- dhinds@pcmcia.sourceforge.org
 
-    smc91c92_cs.c 1.82 1999/11/08 20:46:17
+    smc91c92_cs.c 1.85 2000/01/15 02:03:14
     
     This driver contains code written by Donald Becker
     (becker@cesdis.gsfc.nasa.gov), Rowan Hughes (x-csrdh@jcu.edu.au),
@@ -110,6 +110,8 @@ static dev_info_t dev_info = "smc91c92_cs";
 static dev_link_t *dev_list = NULL;
 
 struct smc_private {
+    dev_link_t                 link;
+    struct net_device          dev;
     u_short                    manfid;
     u_short                    cardid;
     struct net_device_stats    stats;
@@ -336,6 +338,7 @@ static int smc91c92_init(struct net_device *dev)
 static dev_link_t *smc91c92_attach(void)
 {
     client_reg_t client_reg;
+    struct smc_private *smc;
     dev_link_t *link;
     struct net_device *dev;
     int i, ret;
@@ -344,8 +347,11 @@ static dev_link_t *smc91c92_attach(void)
     flush_stale_links();
     
     /* Create new ethernet device */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    smc = kmalloc(sizeof(struct smc_private), GFP_KERNEL);
+    if (!smc) return NULL;
+    memset(smc, 0, sizeof(struct smc_private));
+    link = &smc->link; dev = &smc->dev;
+
     link->release.function = &smc91c92_release;
     link->release.data = (u_long)link;
     link->io.NumPorts1 = 16;
@@ -362,26 +368,19 @@ static dev_link_t *smc91c92_attach(void)
     link->conf.Attributes = CONF_ENABLE_IRQ;
     link->conf.Vcc = 50;
     link->conf.IntType = INT_MEMORY_AND_IO;
-    
-    dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-    memset(dev, 0, sizeof(struct net_device));
-    
-    /* Make up a SMC91-specific-data structure. */
-    dev->priv = kmalloc(sizeof(struct smc_private), GFP_KERNEL);
-    memset(dev->priv, 0, sizeof(struct smc_private));
-    
+
     /* The SMC91c92-specific entries in the device structure. */
     dev->hard_start_xmit = &smc_start_xmit;
     dev->get_stats = &smc91c92_get_stats;
     dev->set_config = &s9k_config;
     dev->set_multicast_list = &set_rx_mode;
     ether_setup(dev);
-    dev->name = ((struct smc_private *)dev->priv)->node.dev_name;
+    dev->name = smc->node.dev_name;
     dev->init = &smc91c92_init;
     dev->open = &smc91c92_open;
     dev->stop = &smc91c92_close;
     dev->tbusy = 1;
-    link->priv = link->irq.Instance = dev;
+    dev->priv = link->priv = link->irq.Instance = smc;
     
     /* Register with Card Services */
     link->next = dev_list;
@@ -415,6 +414,7 @@ static dev_link_t *smc91c92_attach(void)
 
 static void smc91c92_detach(dev_link_t *link)
 {
+    struct smc_private *smc = link->priv;
     dev_link_t **linkp;
     long flags;
 
@@ -447,15 +447,9 @@ static void smc91c92_detach(dev_link_t *link)
     
     /* Unlink device structure, free bits */
     *linkp = link->next;
-    if (link->priv) {
-       struct net_device *dev = link->priv;
-       if (link->dev != NULL)
-           unregister_netdev(dev);
-       if (dev->priv)
-           kfree(dev->priv);
-       kfree(link->priv);
-    }
-    kfree(link);
+    if (link->dev)
+       unregister_netdev(&smc->dev);
+    kfree(smc);
     
 } /* smc91c92_detach */
 
@@ -509,30 +503,29 @@ static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple,
 
 static int mhz_3288_power(dev_link_t *link)
 {
-    struct net_device *dev = link->priv;
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = link->priv;
     u_char tmp;
     
     /* Read the ISR twice... */
-    readb(lp->base+MEGAHERTZ_ISR);
+    readb(smc->base+MEGAHERTZ_ISR);
     udelay(5);
-    readb(lp->base+MEGAHERTZ_ISR);
+    readb(smc->base+MEGAHERTZ_ISR);
 
     /* Pause 200ms... */
     mdelay(200);
     
     /* Now read and write the COR... */
-    tmp = readb(lp->base + link->conf.ConfigBase + CISREG_COR);
+    tmp = readb(smc->base + link->conf.ConfigBase + CISREG_COR);
     udelay(5);
-    writeb(tmp, lp->base + link->conf.ConfigBase + CISREG_COR);
+    writeb(tmp, smc->base + link->conf.ConfigBase + CISREG_COR);
 
     return 0;
 }
 
 static int mhz_mfc_config(dev_link_t *link)
 {
-    struct net_device *dev = link->priv;
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     tuple_t tuple;
     cisparse_t parse;
     u_char buf[255];
@@ -545,6 +538,7 @@ static int mhz_mfc_config(dev_link_t *link)
     link->conf.Status = CCSR_AUDIO_ENA;
     link->irq.Attributes =
        IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED|IRQ_HANDLE_PRESENT;
+    link->io.IOAddrLines = 16;
     link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
     link->io.NumPorts2 = 8;
 
@@ -581,15 +575,15 @@ static int mhz_mfc_config(dev_link_t *link)
     i = CardServices(RequestWindow, &link->win, &req);
     if (i != CS_SUCCESS)
        return i;
-    lp->base = ioremap(req.Base, 0x1000);
+    smc->base = ioremap(req.Base, 0x1000);
     mem.CardOffset = mem.Page = 0;
-    if (lp->manfid == MANFID_MOTOROLA)
+    if (smc->manfid == MANFID_MOTOROLA)
        mem.CardOffset = link->conf.ConfigBase;
     i = CardServices(MapMemPage, link->win, &mem);
     
     if ((i == CS_SUCCESS)
-       && (lp->manfid == MANFID_MEGAHERTZ)
-       && (lp->cardid == PRODID_MEGAHERTZ_EM3288))
+       && (smc->manfid == MANFID_MEGAHERTZ)
+       && (smc->cardid == PRODID_MEGAHERTZ_EM3288))
        mhz_3288_power(link);
     
     return i;
@@ -598,7 +592,8 @@ static int mhz_mfc_config(dev_link_t *link)
 static int mhz_setup(dev_link_t *link)
 {
     client_handle_t handle = link->handle;
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     tuple_t tuple;
     cisparse_t parse;
     u_char buf[255], *station_addr;
@@ -645,27 +640,28 @@ static int mhz_setup(dev_link_t *link)
 
 static void mot_config(dev_link_t *link)
 {
-    struct net_device *dev = link->priv;
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     ioaddr_t ioaddr = dev->base_addr;
     ioaddr_t iouart = link->io.BasePort2;
     
     /* Set UART base address and force map with COR bit 1 */
-    writeb(iouart & 0xff,        lp->base + MOT_UART + CISREG_IOBASE_0);
-    writeb((iouart >> 8) & 0xff, lp->base + MOT_UART + CISREG_IOBASE_1);
-    writeb(MOT_NORMAL,           lp->base + MOT_UART + CISREG_COR);
+    writeb(iouart & 0xff,        smc->base + MOT_UART + CISREG_IOBASE_0);
+    writeb((iouart >> 8) & 0xff, smc->base + MOT_UART + CISREG_IOBASE_1);
+    writeb(MOT_NORMAL,           smc->base + MOT_UART + CISREG_COR);
     
     /* Set SMC base address and force map with COR bit 1 */
-    writeb(ioaddr & 0xff,        lp->base + MOT_LAN + CISREG_IOBASE_0);
-    writeb((ioaddr >> 8) & 0xff, lp->base + MOT_LAN + CISREG_IOBASE_1);
-    writeb(MOT_NORMAL,           lp->base + MOT_LAN + CISREG_COR);
+    writeb(ioaddr & 0xff,        smc->base + MOT_LAN + CISREG_IOBASE_0);
+    writeb((ioaddr >> 8) & 0xff, smc->base + MOT_LAN + CISREG_IOBASE_1);
+    writeb(MOT_NORMAL,           smc->base + MOT_LAN + CISREG_COR);
 
     /* Wait for things to settle down */
     mdelay(100);
 }
 
 static int mot_setup(dev_link_t *link) {
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     ioaddr_t ioaddr = dev->base_addr;
     int i, wait, loop;
     unsigned int addr;
@@ -699,7 +695,8 @@ static int mot_setup(dev_link_t *link) {
 
 static int smc_config(dev_link_t *link)
 {
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     tuple_t tuple;
     cisparse_t parse;
     u_char buf[255];
@@ -731,7 +728,8 @@ static int smc_config(dev_link_t *link)
 static int smc_setup(dev_link_t *link)
 {
     client_handle_t handle = link->handle;
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     tuple_t tuple;
     cisparse_t parse;
     cistpl_lan_node_id_t *node_id;
@@ -774,7 +772,8 @@ static int smc_setup(dev_link_t *link)
 
 static int osi_config(dev_link_t *link)
 {
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     static ioaddr_t com[4] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
     int i, j;
     
@@ -808,7 +807,8 @@ static int osi_config(dev_link_t *link)
 static int osi_setup(dev_link_t *link, u_short manfid, u_short cardid)
 {
     client_handle_t handle = link->handle;
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     tuple_t tuple;
     u_char buf[255];
     int i;
@@ -862,7 +862,8 @@ static int osi_setup(dev_link_t *link, u_short manfid, u_short cardid)
 
 static int check_sig(dev_link_t *link)
 {
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     ioaddr_t ioaddr = dev->base_addr;
     int width;
     u_short s;
@@ -920,8 +921,8 @@ if (ret != CS_SUCCESS) { cs_error(link->handle, svc, ret); goto label; }
 static void smc91c92_config(dev_link_t *link)
 {
     client_handle_t handle = link->handle;
-    struct net_device *dev = link->priv;
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     tuple_t tuple;
     cisparse_t parse;
     u_short buf[32];
@@ -943,19 +944,19 @@ static void smc91c92_config(dev_link_t *link)
     tuple.DesiredTuple = CISTPL_MANFID;
     tuple.Attributes = TUPLE_RETURN_COMMON;
     if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {
-       lp->manfid = parse.manfid.manf;
-       lp->cardid = parse.manfid.card;
+       smc->manfid = parse.manfid.manf;
+       smc->cardid = parse.manfid.card;
     }
     
     /* Configure card */
     link->state |= DEV_CONFIG;
 
-    if (lp->manfid == MANFID_OSITECH) {
+    if (smc->manfid == MANFID_OSITECH) {
        i = osi_config(link);
-    } else if (lp->manfid == MANFID_MOTOROLA
-            || ((lp->manfid == MANFID_MEGAHERTZ)
-                && ((lp->cardid == PRODID_MEGAHERTZ_VARIOUS)
-                    || (lp->cardid == PRODID_MEGAHERTZ_EM3288)))) {
+    } else if (smc->manfid == MANFID_MOTOROLA
+            || ((smc->manfid == MANFID_MEGAHERTZ)
+                && ((smc->cardid == PRODID_MEGAHERTZ_VARIOUS)
+                    || (smc->cardid == PRODID_MEGAHERTZ_EM3288)))) {
        i = mhz_mfc_config(link);
     } else {
        i = smc_config(link);
@@ -967,7 +968,7 @@ static void smc91c92_config(dev_link_t *link)
     i = CardServices(RequestConfiguration, link->handle, &link->conf);
     CS_EXIT_TEST(i, RequestConfiguration, config_failed);
     
-    if (lp->manfid == MANFID_MOTOROLA)
+    if (smc->manfid == MANFID_MOTOROLA)
        mot_config(link);
 
     dev->irq = link->irq.AssignedIRQ;
@@ -983,10 +984,10 @@ static void smc91c92_config(dev_link_t *link)
        goto config_undo;
     }
 
-    switch (lp->manfid) {
+    switch (smc->manfid) {
     case MANFID_OSITECH:
     case MANFID_PSION:
-       i = osi_setup(link, lp->manfid, lp->cardid); break;
+       i = osi_setup(link, smc->manfid, smc->cardid); break;
     case MANFID_SMC:
     case MANFID_NEW_MEDIA:
        i = smc_setup(link); break;
@@ -1004,7 +1005,7 @@ static void smc91c92_config(dev_link_t *link)
        goto config_undo;
     }
 
-    link->dev = &lp->node;
+    link->dev = &smc->node;
     link->state &= ~DEV_CONFIG_PENDING;
 
     rev = check_sig(link);
@@ -1060,13 +1061,13 @@ config_failed:                  /* CS_EXIT_TEST() calls jump to here... */
 static void smc91c92_release(u_long arg)
 {
     dev_link_t *link = (dev_link_t *)arg;
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
 
     DEBUG(0, "smc91c92_release(0x%p)\n", link);
     
     if (link->open) {
        DEBUG(1, "smc91c92_cs: release postponed, '%s' still open\n",
-             dev->name);
+             link->dev->dev_name);
        link->state |= DEV_STALE_CONFIG;
        return;
     }
@@ -1075,8 +1076,7 @@ static void smc91c92_release(u_long arg)
     CardServices(ReleaseIO, link->handle, &link->io);
     CardServices(ReleaseIRQ, link->handle, &link->irq);
     if (link->win) {
-       struct smc_private *lp = dev->priv;
-       iounmap(lp->base);
+       iounmap(smc->base);
        CardServices(ReleaseWindow, link->win);
     }
     
@@ -1097,7 +1097,8 @@ static int smc91c92_event(event_t event, int priority,
                          event_callback_args_t *args)
 {
     dev_link_t *link = args->client_data;
-    struct net_device *dev = link->priv;
+    struct smc_private *smc = link->priv;
+    struct net_device *dev = &smc->dev;
     
     DEBUG(1, "smc91c92_event(0x%06x)\n", event);
 
@@ -1132,15 +1133,14 @@ static int smc91c92_event(event_t event, int priority,
        /* Fall through... */
     case CS_EVENT_CARD_RESET:
        if (link->state & DEV_CONFIG) {
-           struct smc_private *lp = dev->priv;
-           if ((lp->manfid == MANFID_MEGAHERTZ) &&
-               (lp->cardid == PRODID_MEGAHERTZ_EM3288))
+           if ((smc->manfid == MANFID_MEGAHERTZ) &&
+               (smc->cardid == PRODID_MEGAHERTZ_EM3288))
                mhz_3288_power(link);
            CardServices(RequestConfiguration, link->handle, &link->conf);
-           if (lp->manfid == MANFID_MOTOROLA)
+           if (smc->manfid == MANFID_MOTOROLA)
                mot_config(link);
-           if ((lp->manfid == MANFID_OSITECH) &&
-               (lp->cardid != PRODID_OSITECH_SEVEN)) {
+           if ((smc->manfid == MANFID_OSITECH) &&
+               (smc->cardid != PRODID_OSITECH_SEVEN)) {
                /* Power up the card and enable interrupts */
                set_bits(0x0300, dev->base_addr-0x10+OSITECH_AUI_PWR);
                set_bits(0x0300, dev->base_addr-0x10+OSITECH_RESET_ISR);
@@ -1181,8 +1181,8 @@ static void smc_dump(struct net_device *dev)
 
 static int smc91c92_open(struct net_device *dev)
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
-    dev_link_t *link;
+    struct smc_private *smc = dev->priv;
+    dev_link_t *link = &smc->link;
 
 #ifdef PCMCIA_DEBUG
     DEBUG(0, "%s: smc91c92_open(%p), ID/Window %4.4x.\n",
@@ -1191,11 +1191,9 @@ static int smc91c92_open(struct net_device *dev)
 #endif
     
     /* Check that the PCMCIA card is still here. */
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
-    /* Physical device present signature. */
     if (!DEV_OK(link))
        return -ENODEV;
+    /* Physical device present signature. */
     if (check_sig(link) < 0) {
        printk("smc91c92_cs: Yikes!  Bad chip signature!\n");
        return -ENODEV;
@@ -1204,14 +1202,14 @@ static int smc91c92_open(struct net_device *dev)
     MOD_INC_USE_COUNT;
     
     dev->interrupt = 0; dev->tbusy = 0; dev->start = 1;
-    lp->saved_skb = 0;
-    lp->packets_waiting = 0;
+    smc->saved_skb = 0;
+    smc->packets_waiting = 0;
     
     smc_reset(dev);
-    lp->media.function = &media_check;
-    lp->media.data = (u_long)dev;
-    lp->media.expires = jiffies + HZ;
-    add_timer(&lp->media);
+    smc->media.function = &media_check;
+    smc->media.data = (u_long)smc;
+    smc->media.expires = jiffies + HZ;
+    add_timer(&smc->media);
     
     return 0;
 } /* smc91c92_open */
@@ -1220,8 +1218,9 @@ static int smc91c92_open(struct net_device *dev)
 
 static int smc91c92_close(struct net_device *dev)
 {
+    struct smc_private *smc = dev->priv;
+    dev_link_t *link = &smc->link;
     ioaddr_t ioaddr = dev->base_addr;
-    dev_link_t *link;
 
     DEBUG(0, "%s: smc91c92_close(), status %4.4x.\n",
          dev->name, inw(ioaddr + BANK_SELECT));
@@ -1241,13 +1240,8 @@ static int smc91c92_close(struct net_device *dev)
     SMC_SELECT_BANK( 1 );
     outw(CTL_POWERDOWN, ioaddr + CONTROL  );
     
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev) break;
-    if (link == NULL)
-       return -ENODEV;
-    
     link->open--; dev->start = 0;
-    del_timer(&((struct smc_private *)dev->priv)->media);
+    del_timer(&smc->media);
     if (link->state & DEV_STALE_CONFIG) {
        link->release.expires = jiffies + HZ/20;
        link->state |= DEV_RELEASE_PENDING;
@@ -1269,8 +1263,8 @@ static int smc91c92_close(struct net_device *dev)
 
 static void smc_hardware_send_packet( struct net_device * dev )
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
-    struct sk_buff *skb = lp->saved_skb;
+    struct smc_private *smc = dev->priv;
+    struct sk_buff *skb = smc->saved_skb;
     ioaddr_t ioaddr = dev->base_addr;
     unsigned char packet_no;
     
@@ -1286,12 +1280,12 @@ static void smc_hardware_send_packet( struct net_device * dev )
        printk(KERN_WARNING "%s: 91c92 hardware Tx buffer allocation"
               " failed, status %#2.2x.\n", dev->name, packet_no);
        dev_kfree_skb (skb);
-       lp->saved_skb = NULL;
+       smc->saved_skb = NULL;
        dev->tbusy = 0;
        return;
     }
     
-    lp->stats.tx_bytes += skb->len;
+    smc->stats.tx_bytes += skb->len;
     /* The card should use the just-allocated buffer. */
     outw( packet_no, ioaddr + PNR_ARR );
     /* point to the beginning of the packet */
@@ -1332,7 +1326,7 @@ static void smc_hardware_send_packet( struct net_device * dev )
     /* The chip does the rest of the work. */
     outw( MC_ENQUEUE , ioaddr + MMU_CMD );
     
-    lp->saved_skb = NULL;
+    smc->saved_skb = NULL;
     dev_kfree_skb (skb);
     dev->trans_start = jiffies;
     dev->tbusy = 0;
@@ -1343,7 +1337,7 @@ static void smc_hardware_send_packet( struct net_device * dev )
 
 static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
+    struct smc_private *smc = dev->priv;
     ioaddr_t ioaddr = dev->base_addr;
     unsigned short num_pages;
     short time_out, ir;
@@ -1356,11 +1350,11 @@ static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev)
        printk(KERN_NOTICE "%s: SMC91c92 transmit timed out, "
               "Tx_status %2.2x status %4.4x.\n",
               dev->name, inw(ioaddr)&0xff, inw(ioaddr + 2));
-       lp->stats.tx_errors++;
+       smc->stats.tx_errors++;
        smc_reset(dev);
        dev->trans_start = jiffies;
        dev->tbusy = 0;
-       lp->saved_skb = NULL;
+       smc->saved_skb = NULL;
     }
 
     DEBUG(2, "%s: smc91c92_start_xmit(length = %d) called,"
@@ -1372,26 +1366,26 @@ static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev)
        return 1;
     }
     
-    if ( lp->saved_skb) {
+    if ( smc->saved_skb) {
        /* THIS SHOULD NEVER HAPPEN. */
-       lp->stats.tx_aborted_errors++;
+       smc->stats.tx_aborted_errors++;
        printk(KERN_DEBUG "%s: Internal error -- sent packet while busy.\n",
               dev->name);
        return 1;
     }
-    lp->saved_skb = skb;
+    smc->saved_skb = skb;
     
     num_pages = skb->len >> 8;
     
     if (num_pages > 7) {
        printk(KERN_ERR "%s: Far too big packet error.\n", dev->name);
        dev_kfree_skb (skb);
-       lp->saved_skb = NULL;
-       lp->stats.tx_dropped++;
+       smc->saved_skb = NULL;
+       smc->stats.tx_dropped++;
        return 0;               /* Do not re-queue this packet. */
     }
     /* A packet is now waiting. */
-    lp->packets_waiting++;
+    smc->packets_waiting++;
     
     SMC_SELECT_BANK( 2 );      /* Paranoia, we should always be in window 2 */
     
@@ -1422,7 +1416,7 @@ static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
 static void smc_tx_err( struct net_device * dev )
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
+    struct smc_private *smc = (struct smc_private *)dev->priv;
     ioaddr_t ioaddr = dev->base_addr;
     int saved_packet = inw(ioaddr + PNR_ARR) & 0xff;
     int packet_no = inw(ioaddr + FIFO_PORTS) & 0x7f;
@@ -1436,12 +1430,12 @@ static void smc_tx_err( struct net_device * dev )
     
     tx_status = inw(ioaddr + DATA_1);
 
-    lp->stats.tx_errors++;
-    if (tx_status & TS_LOSTCAR) lp->stats.tx_carrier_errors++;
-    if (tx_status & TS_LATCOL)  lp->stats.tx_window_errors++;
+    smc->stats.tx_errors++;
+    if (tx_status & TS_LOSTCAR) smc->stats.tx_carrier_errors++;
+    if (tx_status & TS_LATCOL)  smc->stats.tx_window_errors++;
     if (tx_status & TS_16COL) {
-       lp->stats.tx_aborted_errors++;
-       lp->tx_err++;
+       smc->stats.tx_aborted_errors++;
+       smc->tx_err++;
     }
     
     if ( tx_status & TS_SUCCESS ) {
@@ -1456,7 +1450,7 @@ static void smc_tx_err( struct net_device * dev )
     outw( MC_FREEPKT, ioaddr + MMU_CMD );      /* Free the packet memory. */
     
     /* one less packet waiting for me */
-    lp->packets_waiting--;
+    smc->packets_waiting--;
     
     outw( saved_packet, ioaddr + PNR_ARR );
     return;
@@ -1466,7 +1460,7 @@ static void smc_tx_err( struct net_device * dev )
 
 static void smc_eph_irq(struct net_device *dev)
 {
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = dev->priv;
     ioaddr_t ioaddr = dev->base_addr;
     unsigned short card_stats, ephs;
     
@@ -1477,10 +1471,10 @@ static void smc_eph_irq(struct net_device *dev)
     /* Could be a counter roll-over warning: update stats. */
     card_stats = inw( ioaddr + COUNTER );
     /* single collisions */
-    lp->stats.collisions += card_stats & 0xF;
+    smc->stats.collisions += card_stats & 0xF;
     card_stats >>= 4;
     /* multiple collisions */
-    lp->stats.collisions += card_stats & 0xF;
+    smc->stats.collisions += card_stats & 0xF;
 #if 0          /* These are for when linux supports these statistics */
     card_stats >>= 4;                  /* deferred */
     card_stats >>= 4;                  /* excess deferred */
@@ -1500,13 +1494,13 @@ static void smc_eph_irq(struct net_device *dev)
     
 static void smc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-    struct net_device *dev = dev_id;
-    struct smc_private *lp;
+    struct smc_private *smc = dev_id;
+    struct net_device *dev = &smc->dev;
     ioaddr_t ioaddr;
     u_short saved_bank, saved_pointer, mask, status;
     char bogus_cnt = INTR_WORK;                /* Work we are willing to do. */
 
-    if ((dev == NULL) || !dev->start)
+    if ((smc == NULL) || !dev->start)
        return;
     ioaddr = dev->base_addr;
     
@@ -1522,8 +1516,7 @@ static void smc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
          irq, ioaddr);
 #endif
     
-    lp = (struct smc_private *)dev->priv;
-    lp->watchdog = 0;
+    smc->watchdog = 0;
     saved_bank = inw(ioaddr + BANK_SELECT);
     if ((saved_bank & 0xff00) != 0x3300) {
        /* The device does not exist -- the card could be off-line, or
@@ -1553,7 +1546,7 @@ static void smc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        if (status & IM_RCV_INT) {
            /* Got a packet(s). */
            smc_rx(dev);
-           lp->last_rx = jiffies;
+           smc->last_rx = jiffies;
        }
        if (status & IM_TX_INT) {
            smc_tx_err(dev);
@@ -1563,8 +1556,8 @@ static void smc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        if (status & IM_TX_EMPTY_INT) {
            outw(IM_TX_EMPTY_INT, ioaddr + INTERRUPT);
            mask &= ~IM_TX_EMPTY_INT;
-           lp->stats.tx_packets += lp->packets_waiting;
-           lp->packets_waiting = 0;
+           smc->stats.tx_packets += smc->packets_waiting;
+           smc->packets_waiting = 0;
        }
        if (status & IM_ALLOC_INT) {
            /* Clear this interrupt so it doesn't happen again */
@@ -1579,8 +1572,8 @@ static void smc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
            mark_bh( NET_BH );
        }
        if (status & IM_RX_OVRN_INT) {
-           lp->stats.rx_errors++;
-           lp->stats.rx_fifo_errors++;         
+           smc->stats.rx_errors++;
+           smc->stats.rx_fifo_errors++;                
            outw(IM_RX_OVRN_INT, ioaddr + INTERRUPT);
        }
        if (status & IM_EPH_INT)
@@ -1602,25 +1595,25 @@ static void smc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
 irq_done:
     
-    if ((lp->manfid == MANFID_OSITECH) &&
-       (lp->cardid != PRODID_OSITECH_SEVEN)) {
+    if ((smc->manfid == MANFID_OSITECH) &&
+       (smc->cardid != PRODID_OSITECH_SEVEN)) {
        /* Retrigger interrupt if needed */
        mask_bits(0x00ff, ioaddr-0x10+OSITECH_RESET_ISR);
        set_bits(0x0300, ioaddr-0x10+OSITECH_RESET_ISR);
     }
-    if (lp->manfid == MANFID_MOTOROLA) {
+    if (smc->manfid == MANFID_MOTOROLA) {
        u_char cor;
-       cor = readb(lp->base + MOT_UART + CISREG_COR);
-       writeb(cor & ~COR_IREQ_ENA, lp->base + MOT_UART + CISREG_COR);
-       writeb(cor, lp->base + MOT_UART + CISREG_COR);
-       cor = readb(lp->base + MOT_LAN + CISREG_COR);
-       writeb(cor & ~COR_IREQ_ENA, lp->base + MOT_LAN + CISREG_COR);
-       writeb(cor, lp->base + MOT_LAN + CISREG_COR);
+       cor = readb(smc->base + MOT_UART + CISREG_COR);
+       writeb(cor & ~COR_IREQ_ENA, smc->base + MOT_UART + CISREG_COR);
+       writeb(cor, smc->base + MOT_UART + CISREG_COR);
+       cor = readb(smc->base + MOT_LAN + CISREG_COR);
+       writeb(cor & ~COR_IREQ_ENA, smc->base + MOT_LAN + CISREG_COR);
+       writeb(cor, smc->base + MOT_LAN + CISREG_COR);
     }
 #ifdef DOES_NOT_WORK
-    if (lp->base != NULL) { /* Megahertz MFC's */
-       readb(lp->base+MEGAHERTZ_ISR);
-       readb(lp->base+MEGAHERTZ_ISR);
+    if (smc->base != NULL) { /* Megahertz MFC's */
+       readb(smc->base+MEGAHERTZ_ISR);
+       readb(smc->base+MEGAHERTZ_ISR);
     }
 #endif
 }
@@ -1629,7 +1622,7 @@ irq_done:
 
 static void smc_rx(struct net_device *dev)
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
+    struct smc_private *smc = (struct smc_private *)dev->priv;
     ioaddr_t ioaddr = dev->base_addr;
     int rx_status;
     int packet_length; /* Caution: not frame length, rather words
@@ -1660,7 +1653,7 @@ static void smc_rx(struct net_device *dev)
        
        if ( skb == NULL ) {
            DEBUG(1, "%s: Low memory, packet dropped.\n", dev->name);
-           lp->stats.rx_dropped++;
+           smc->stats.rx_dropped++;
            outw( MC_RELEASE, ioaddr + MMU_CMD );
            return;
        }
@@ -1673,18 +1666,18 @@ static void smc_rx(struct net_device *dev)
        
        skb->dev = dev;
        netif_rx(skb);
-       lp->stats.rx_packets++;
-       lp->stats.rx_bytes += skb->len;
+       smc->stats.rx_packets++;
+       smc->stats.rx_bytes += skb->len;
        if (rx_status & RS_MULTICAST)
-           lp->stats.multicast++;
+           smc->stats.multicast++;
     } else {
        /* error ... */
-       lp->stats.rx_errors++;
+       smc->stats.rx_errors++;
        
-       if (rx_status & RS_ALGNERR)  lp->stats.rx_frame_errors++;
+       if (rx_status & RS_ALGNERR)  smc->stats.rx_frame_errors++;
        if (rx_status & (RS_TOOSHORT | RS_TOOLONG))
-           lp->stats.rx_length_errors++;
-       if (rx_status & RS_BADCRC)      lp->stats.rx_crc_errors++;
+           smc->stats.rx_length_errors++;
+       if (rx_status & RS_BADCRC)      smc->stats.rx_crc_errors++;
     }
     /* Let the MMU free the memory of this packet. */
     outw(MC_RELEASE, ioaddr + MMU_CMD);
@@ -1696,9 +1689,9 @@ static void smc_rx(struct net_device *dev)
 
 static struct net_device_stats *smc91c92_get_stats(struct net_device *dev)
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
+    struct smc_private *smc = (struct smc_private *)dev->priv;
     /* Nothing to update - the 91c92 is a pretty primative chip. */
-    return &lp->stats;
+    return &smc->stats;
 }
 
 /*======================================================================
@@ -1801,9 +1794,9 @@ static void set_rx_mode(struct net_device *dev)
 
 static int s9k_config(struct net_device *dev, struct ifmap *map)
 {
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = dev->priv;
     if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {
-       if (lp->cfg & CFG_MII_SELECT)
+       if (smc->cfg & CFG_MII_SELECT)
            return -EOPNOTSUPP;
        else if (map->port > 2)
            return -EINVAL;
@@ -1827,24 +1820,24 @@ static int s9k_config(struct net_device *dev, struct ifmap *map)
 */
 static void smc_set_xcvr(struct net_device *dev, int if_port)
 {
-    struct smc_private *lp = (struct smc_private *)dev->priv;
+    struct smc_private *smc = (struct smc_private *)dev->priv;
     ioaddr_t ioaddr = dev->base_addr;
     u_short saved_bank;
 
     saved_bank = inw(ioaddr + BANK_SELECT);
     SMC_SELECT_BANK(1);
     if (if_port == 2) {
-       outw(lp->cfg | CFG_AUI_SELECT, ioaddr + CONFIG);
-       if ((lp->manfid == MANFID_OSITECH) &&
-           (lp->cardid != PRODID_OSITECH_SEVEN))
+       outw(smc->cfg | CFG_AUI_SELECT, ioaddr + CONFIG);
+       if ((smc->manfid == MANFID_OSITECH) &&
+           (smc->cardid != PRODID_OSITECH_SEVEN))
            set_bits(OSI_AUI_PWR, ioaddr - 0x10 + OSITECH_AUI_PWR);
-       lp->media_status = ((dev->if_port == 0) ? 0x0001 : 0x0002);
+       smc->media_status = ((dev->if_port == 0) ? 0x0001 : 0x0002);
     } else {
-       outw(lp->cfg, ioaddr + CONFIG);
-       if ((lp->manfid == MANFID_OSITECH) &&
-           (lp->cardid != PRODID_OSITECH_SEVEN))
+       outw(smc->cfg, ioaddr + CONFIG);
+       if ((smc->manfid == MANFID_OSITECH) &&
+           (smc->cardid != PRODID_OSITECH_SEVEN))
            mask_bits(~OSI_AUI_PWR, ioaddr - 0x10 + OSITECH_AUI_PWR);
-       lp->media_status = ((dev->if_port == 0) ? 0x0012 : 0x4001);
+       smc->media_status = ((dev->if_port == 0) ? 0x0012 : 0x4001);
     }
     SMC_SELECT_BANK(saved_bank);
 }
@@ -1852,7 +1845,7 @@ static void smc_set_xcvr(struct net_device *dev, int if_port)
 static void smc_reset(struct net_device *dev)
 {
     ioaddr_t ioaddr = dev->base_addr;
-    struct smc_private *lp = dev->priv;
+    struct smc_private *smc = dev->priv;
     int i;
 
     DEBUG(0, "%s: smc91c92 reset called.\n", dev->name);
@@ -1875,12 +1868,12 @@ static void smc_reset(struct net_device *dev)
        Accept link errors, counter and Tx error interrupts. */
     outw(CTL_AUTO_RELEASE | CTL_TE_ENABLE | CTL_CR_ENABLE,
         ioaddr + CONTROL);
-    lp->cfg = inw(ioaddr + CONFIG) & ~CFG_AUI_SELECT;
-    lp->cfg |= CFG_NO_WAIT | CFG_16BIT | CFG_STATIC |
-       (lp->manfid == MANFID_OSITECH ? (CFG_IRQ_SEL_1 | CFG_IRQ_SEL_0) : 0);
+    smc->cfg = inw(ioaddr + CONFIG) & ~CFG_AUI_SELECT;
+    smc->cfg |= CFG_NO_WAIT | CFG_16BIT | CFG_STATIC |
+       (smc->manfid == MANFID_OSITECH ? (CFG_IRQ_SEL_1 | CFG_IRQ_SEL_0) : 0);
     smc_set_xcvr(dev, dev->if_port);
-    if ((lp->manfid == MANFID_OSITECH) &&
-       (lp->cardid != PRODID_OSITECH_SEVEN))
+    if ((smc->manfid == MANFID_OSITECH) &&
+       (smc->cardid != PRODID_OSITECH_SEVEN))
        outw((dev->if_port == 2 ? OSI_AUI_PWR : 0) |
             (inw(ioaddr-0x10+OSITECH_AUI_PWR) & 0xff00),
             ioaddr - 0x10 + OSITECH_AUI_PWR);
@@ -1897,7 +1890,7 @@ static void smc_reset(struct net_device *dev)
     
     /* Re-enable the chip. */
     SMC_SELECT_BANK(0);
-    outw(((lp->cfg & CFG_MII_SELECT) ? 0 : TCR_MONCSN) |
+    outw(((smc->cfg & CFG_MII_SELECT) ? 0 : TCR_MONCSN) |
         TCR_ENABLE | TCR_PAD_EN, ioaddr + TCR);
     set_rx_mode(dev);
 
@@ -1915,14 +1908,13 @@ static void smc_reset(struct net_device *dev)
 
 static void media_check(u_long arg)
 {
-    struct net_device *dev = (struct net_device *)(arg);
-    struct smc_private *lp = (struct smc_private *)dev->priv;
+    struct smc_private *smc = (struct smc_private *)(arg);
+    struct net_device *dev = &smc->dev;
     ioaddr_t ioaddr = dev->base_addr;
     u_short i, media, saved_bank;
 
     if (dev->start == 0) goto reschedule;
     
-    lp = (struct smc_private *)dev->priv;
     saved_bank = inw(ioaddr + BANK_SELECT);
     SMC_SELECT_BANK(2);
     i = inw(ioaddr + INTERRUPT);
@@ -1934,36 +1926,36 @@ static void media_check(u_long arg)
     
     /* Check for pending interrupt with watchdog flag set: with
        this, we can limp along even if the interrupt is blocked */
-    if (lp->watchdog++ && ((i>>8) & i)) {
-       if (!lp->fast_poll)
+    if (smc->watchdog++ && ((i>>8) & i)) {
+       if (!smc->fast_poll)
            printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
-       smc_interrupt(dev->irq, dev, NULL);
-       lp->fast_poll = HZ;
+       smc_interrupt(dev->irq, smc, NULL);
+       smc->fast_poll = HZ;
     }
-    if (lp->fast_poll) {
-       lp->fast_poll--;
-       lp->media.expires = jiffies + 1;
-       add_timer(&lp->media);
+    if (smc->fast_poll) {
+       smc->fast_poll--;
+       smc->media.expires = jiffies + 1;
+       add_timer(&smc->media);
        return;
     }
 
-    if (lp->cfg & CFG_MII_SELECT)
+    if (smc->cfg & CFG_MII_SELECT)
        goto reschedule;
 
     /* Ignore collisions unless we've had no rx's recently */
-    if (jiffies - lp->last_rx > HZ) {
-       if (lp->tx_err || (lp->media_status & EPH_16COL))
+    if (jiffies - smc->last_rx > HZ) {
+       if (smc->tx_err || (smc->media_status & EPH_16COL))
            media |= EPH_16COL;
     }
-    lp->tx_err = 0;
+    smc->tx_err = 0;
 
-    if (media != lp->media_status) {
-       if ((media & lp->media_status & 1) &&
-           ((lp->media_status ^ media) & EPH_LINK_OK))
+    if (media != smc->media_status) {
+       if ((media & smc->media_status & 1) &&
+           ((smc->media_status ^ media) & EPH_LINK_OK))
            printk(KERN_INFO "%s: %s link beat\n", dev->name,
-                  (lp->media_status & EPH_LINK_OK ? "lost" : "found"));
-       else if ((media & lp->media_status & 2) &&
-                ((lp->media_status ^ media) & EPH_16COL))
+                  (smc->media_status & EPH_LINK_OK ? "lost" : "found"));
+       else if ((media & smc->media_status & 2) &&
+                ((smc->media_status ^ media) & EPH_16COL))
            printk(KERN_INFO "%s: coax cable %s\n", dev->name,
                   (media & EPH_16COL ? "problem" : "ok"));
        if (dev->if_port == 0) {
@@ -1981,12 +1973,12 @@ static void media_check(u_long arg)
                           dev->name);
            }
        }
-       lp->media_status = media;
+       smc->media_status = media;
     }
     
 reschedule:
-    lp->media.expires = jiffies + HZ;
-    add_timer(&lp->media);
+    smc->media.expires = jiffies + HZ;
+    add_timer(&smc->media);
 }
 
 /*====================================================================*/
index 5e9c9e6e21bd6a9c2e5a8f20e16e7989fe23af8f..c1c38aa2855089ca5587c82c8f788e194a76fc64 100644 (file)
@@ -2105,7 +2105,7 @@ wavelan_ioctl(struct net_device * dev,    /* Device on wich the ioctl apply */
        }
 
       /* only super-user can see encryption key */
-      if(!suser())
+      if(!capable(CAP_NET_ADMIN))
        {
          ret = -EPERM;
          break;
@@ -2437,7 +2437,7 @@ wavelan_ioctl(struct net_device * dev,    /* Device on wich the ioctl apply */
       /* ------------------ PRIVATE IOCTL ------------------ */
 
     case SIOCSIPQTHR:
-      if(!suser())
+      if(!capable(CAP_NET_ADMIN))
        {
          ret = -EPERM;
          break;
@@ -2476,7 +2476,7 @@ wavelan_ioctl(struct net_device * dev,    /* Device on wich the ioctl apply */
 #ifdef HISTOGRAM
     case SIOCSIPHISTO:
       /* Verif if the user is root */
-      if(!suser())
+      if(!capable(CAP_NET_ADMIN))
        {
          ret = -EPERM;
        }
index 0b9c4bd3a8165abdae08bb94b5b1186a20dbc99c..0c4f72ae7af0b13fa5fea7adb915b19ff3d54a1c 100644 (file)
@@ -1,37 +1,44 @@
-/* [xirc2ps_cs.c wk 14.04.97] (1.31 1998/12/09 19:32:55)
- * Xircom Creditcard Ethernet Adapter IIps driver
+/* [xirc2ps_cs.c wk 03.11.99] (1.40 1999/11/18 00:06:03)
+ * Xircom CreditCard Ethernet Adapter IIps driver
+ * Xircom Realport 10/100 (RE-100) driver 
  *
- * This driver works for the CE2, CEM28, CEM33, CE3 and CEM56 cards.
- * The CEM56 has some problems, but it works.
- * The CEII card with the 14k4 modem and other old cards do not work.
+ * This driver originally was made by Werner Koch. Since the driver was left
+ * unmaintained for some time, there have been some improvements and changes
+ * since. These include supporting some of the "Realport" cards and develop-
+ * ing enhancements to support the new ones.
+ * It is made for CE2, CEM28, CEM33, CE33 and 
+ * CEM56 cards. The CEM56 cards work both with their modem and ethernet
+ * interface. The RealPort 10/100 Modem and similar cards are supported but
+ * with some bugs which are being corrected as they are detected. 
+ * 
+ * Code revised and maintained by Allan Baker Ortegon
+ * al527261@prodigy.net.mx
+ * Written originally by Werner Koch based on David Hinds' skeleton of the
+ * PCMCIA driver. The code has been modified as to make the newer cards
+ * available.
  *
- * Written by Werner Koch (werner.koch@guug.de),
- * based on David Hinds skeleton driver.
+ * The latest code for the driver, information on the development project
+ * for the Xircom RealPort and CE cards for the PCMCIA driver, and other
+ * related material, can be found at the following URL, which is underway:
+ * 
+ * "http://xirc2ps.linuxbox.com/index.html"
  *
- * You can get the latest driver revision from
- *     "http://www.d.shuttle.de/isil/xircom/xirc2ps.html"
+ * Any bugs regarding this driver, please send them to:
+ * alanyuu@linuxbox.com
  *
- * Please report bugs to: "xircom-bugs@isil.d.shuttle.de"
- *
- * A bug fix for the CEM56 to use modem and ethernet simultaneously
- * was provided by Koen Van Herck (Koen.Van.Herck@xircom.com).
- *
- * If your card locks up you should use the option "lockup_hack=1";
- * this may solve the problem but violates a kernel timing convention
- * (Thanks to David Luyer).
- *
- * Thanks to David Hinds for the PCMCIA package, Donald Becker for some
- * advice, Xircom for providing specs and help, 4PC GmbH Duesseldorf for
- * providing some hardware and last not least to all folks who helped to
- * develop this driver.
- *
- * For those, who are willing to do alpha testing of drivers, I have setup
- * the mailing list "xircom-devel@isil.d.shuttle.de" (To subscribe send a
- * message containing the word "subscribe" in the subject or somewhere at
- * the beginning of a line to "xircom-devel-request@isil.d.shuttle.de").
+ * The driver is still evolving and there are many cards which will benefit
+ * from having alpha testers. If you have a particular card and would like
+ * to be involved in this ongoing effort, please send mail to the maintainer.
+ * 
+ * Special thanks to David Hinds, to Xircom for the specifications and their
+ * software development kit, and all others who may have colaborated in the
+ * development of the driver: Koen Van Herck (Koen.Van.Herck@xircom.com),
+ * 4PC GmbH Duesseldorf, David Luger, et al.
+ * 
  *
  ************************************************************************
  * Copyright (c) 1997,1998 Werner Koch (dd9jn)
+ * Copyright (c) 1999 Allan Baker Ortegon 
  *
  * This driver is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -70,7 +77,7 @@
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
@@ -388,6 +395,8 @@ static dev_link_t *dev_list = NULL;
  */
 
 typedef struct local_info_t {
+    dev_link_t link;
+    struct net_device dev;
     dev_node_t node;
     struct enet_statistics stats;
     int card_type;
@@ -472,14 +481,18 @@ get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
 static void
 busy_loop(u_long len)
 {
-    u_long timeout = jiffies + len;
-    u_long flags;
-
-    save_flags(flags);
-    sti();
-    while (timeout >= jiffies)
-       ;
-    restore_flags(flags);
+    if (in_interrupt()) {
+       u_long timeout = jiffies + len;
+       u_long flags;
+       save_flags(flags);
+       sti();
+       while (timeout >= jiffies)
+           ;
+       restore_flags(flags);
+    } else {
+       __set_current_state(TASK_UNINTERRUPTIBLE);
+       schedule_timeout(len);
+    }
 }
 
 /*====== Functions used for debugging =================================*/
@@ -674,9 +687,13 @@ xirc2ps_attach(void)
     DEBUG(0, "attach()\n");
     flush_stale_links();
 
-    /* Initialize the dev_link_t structure */
-    link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    /* Allocate the device structure */
+    local = kmalloc(sizeof(*local), GFP_KERNEL);
+    if (!local) return NULL;
+    memset(local, 0, sizeof(*local));
+    link = &local->link; dev = &local->dev;
+    link->priv = dev->priv = local;
+
     link->release.function = &xirc2ps_release;
     link->release.data = (u_long) link;
 
@@ -686,13 +703,8 @@ xirc2ps_attach(void)
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.ConfigIndex = 1;
     link->conf.Present = PRESENT_OPTION;
-
-    /* Allocate space for a device structure */
-    dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-    memset(dev, 0, sizeof(struct net_device));
-    local = kmalloc(sizeof(local_info_t), GFP_KERNEL);
-    memset(local, 0, sizeof(local_info_t));
-    dev->priv = local;
+    link->irq.Handler = xirc2ps_interrupt;
+    link->irq.Instance = dev;
 
     /* Fill in card specific entries */
     dev->hard_start_xmit = &do_start_xmit;
@@ -706,7 +718,6 @@ xirc2ps_attach(void)
     dev->open = &do_open;
     dev->stop = &do_stop;
     dev->tbusy = 1;
-    link->priv = dev;
 
     /* Register with Card Services */
     link->next = dev_list;
@@ -739,6 +750,7 @@ xirc2ps_attach(void)
 static void
 xirc2ps_detach(dev_link_t * link)
 {
+    local_info_t *local = link->priv;
     dev_link_t **linkp;
     long flags;
 
@@ -778,17 +790,11 @@ xirc2ps_detach(dev_link_t * link)
     if (link->handle)
        CardServices(DeregisterClient, link->handle);
 
-    /* Unlink device structure, free pieces */
+    /* Unlink device structure, free it */
     *linkp = link->next;
-    if (link->priv) {
-       struct net_device *dev = link->priv;
-       if (link->dev != NULL)
-           unregister_netdev(dev);
-       if (dev->priv)
-           kfree(dev->priv);
-       kfree(link->priv);
-    }
-    kfree(link);
+    if (link->dev)
+       unregister_netdev(&local->dev);
+    kfree(local);
 
 } /* xirc2ps_detach */
 
@@ -813,8 +819,7 @@ xirc2ps_detach(dev_link_t * link)
 static int
 set_card_type(dev_link_t *link, const void *s)
 {
-    struct net_device *dev = link->priv;
-    local_info_t *local = dev->priv;
+    local_info_t *local = link->priv;
   #ifdef PCMCIA_DEBUG
     unsigned cisrev = ((const unsigned char *)s)[2];
   #endif
@@ -907,20 +912,17 @@ has_ce2_string(dev_link_t * link)
 static void
 xirc2ps_config(dev_link_t * link)
 {
-    client_handle_t handle;
+    client_handle_t handle = link->handle;
+    local_info_t *local = link->priv;
+    struct net_device *dev = &local->dev;
     tuple_t tuple;
     cisparse_t parse;
-    struct net_device *dev;
-    local_info_t *local;
     ioaddr_t ioaddr;
     int err, i;
     u_char buf[64];
     cistpl_lan_node_id_t *node_id = (cistpl_lan_node_id_t*)parse.funce.data;
     cistpl_cftable_entry_t *cf = &parse.cftable_entry;
 
-    handle = link->handle;
-    dev = link->priv;
-    local = dev->priv;
     local->dingo_ccr = 0;
 
     DEBUG(0, "config(0x%p)\n", link);
@@ -1034,8 +1036,6 @@ xirc2ps_config(dev_link_t * link)
        for (i = 0; i < 4; i++)
            link->irq.IRQInfo2 |= 1 << irq_list[i];
     }
-    link->irq.Handler = xirc2ps_interrupt;
-    link->irq.Instance = dev;
     if (local->modem) {
        int pass;
 
@@ -1124,7 +1124,7 @@ xirc2ps_config(dev_link_t * link)
      * the I/O windows and the interrupt mapping.
      */
     if ((err=CardServices(RequestConfiguration,
-                                       link->handle, &link->conf))) {
+                         link->handle, &link->conf))) {
        cs_error(link->handle, RequestConfiguration, err);
        goto config_error;
     }
@@ -1146,7 +1146,7 @@ xirc2ps_config(dev_link_t * link)
        reg.Offset = CISREG_IOBASE_0;
        reg.Value = link->io.BasePort2 & 0xff;
        if ((err = CardServices(AccessConfigurationRegister, link->handle,
-                                                            &reg))) {
+                               &reg))) {
            cs_error(link->handle, AccessConfigurationRegister, err);
            goto config_error;
        }
@@ -1154,7 +1154,7 @@ xirc2ps_config(dev_link_t * link)
        reg.Offset = CISREG_IOBASE_1;
        reg.Value = (link->io.BasePort2 >> 8) & 0xff;
        if ((err = CardServices(AccessConfigurationRegister, link->handle,
-                                                             &reg))) {
+                               &reg))) {
            cs_error(link->handle, AccessConfigurationRegister, err);
            goto config_error;
        }
@@ -1213,20 +1213,19 @@ xirc2ps_config(dev_link_t * link)
        }
       #endif
 
-       writeb(0x01               , local->dingo_ccr + 0x20);
-       writeb(0x0c               , local->dingo_ccr + 0x22);
-       writeb(0x00               , local->dingo_ccr + 0x24);
-       writeb(0x00               , local->dingo_ccr + 0x26);
-       writeb(0x00               , local->dingo_ccr + 0x28);
+       writeb(0x01, local->dingo_ccr + 0x20);
+       writeb(0x0c, local->dingo_ccr + 0x22);
+       writeb(0x00, local->dingo_ccr + 0x24);
+       writeb(0x00, local->dingo_ccr + 0x26);
+       writeb(0x00, local->dingo_ccr + 0x28);
     }
 
     /* The if_port symbol can be set when the module is loaded */
     local->probe_port=0;
     if (!if_port) {
-       local->probe_port=1;
-       dev->if_port = 1;
-    }
-    else if ((if_port >= 1 && if_port <= 2) || (local->mohawk && if_port==4))
+       local->probe_port = dev->if_port = 1;
+    } else if ((if_port >= 1 && if_port <= 2) ||
+              (local->mohawk && if_port==4))
        dev->if_port = if_port;
     else
        printk(KNOT_XIRC "invalid if_port requested\n");
@@ -1275,7 +1274,8 @@ static void
 xirc2ps_release(u_long arg)
 {
     dev_link_t *link = (dev_link_t *) arg;
-    struct net_device *dev = link->priv;
+    local_info_t *local = link->priv;
+    struct net_device *dev = &local->dev;
 
     DEBUG(0, "release(0x%p)\n", link);
 
@@ -1322,8 +1322,8 @@ xirc2ps_event(event_t event, int priority,
              event_callback_args_t * args)
 {
     dev_link_t *link = args->client_data;
-    struct net_device *dev = link->priv;
-    local_info_t *lp = dev? dev->priv : NULL;
+    local_info_t *lp = link->priv;
+    struct net_device *dev = &lp->dev;
 
     DEBUG(0, "event(%d)\n", (int)event);
 
@@ -1382,7 +1382,7 @@ static void
 xirc2ps_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
     struct net_device *dev = (struct net_device *)dev_id;
-    local_info_t *lp;
+    local_info_t *lp = dev->priv;
     ioaddr_t ioaddr;
     u_char saved_page;
     unsigned bytes_rcvd;
@@ -1401,7 +1401,6 @@ xirc2ps_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        return;
     }
     dev->interrupt = 1;
-    lp = dev->priv;
     ioaddr = dev->base_addr;
     if (lp->mohawk) { /* must disable the interrupt */
        PutByte(XIRCREG_CR, 0);
@@ -1441,7 +1440,7 @@ xirc2ps_interrupt(int irq, void *dev_id, struct pt_regs *regs)
            /* too many bytes received during this int, drop the rest of the
             * packets */
            lp->stats.rx_dropped++;
-           printk(KINF_XIRC "%s: RX drop, too much done\n", dev->name);
+           DEBUG(2, "%s: RX drop, too much done\n", dev->name);
            PutWord(XIRCREG0_DO, 0x8000); /* issue cmd: skip_rx_packet */
        } else if (rsr & PktRxOk) {
            struct sk_buff *skb;
@@ -1782,8 +1781,6 @@ do_config(struct net_device *dev, struct ifmap *map)
 
     DEBUG(0, "do_config(%p)\n", dev);
     if (map->port != 255 && map->port != dev->if_port) {
-       if (local->new_mii)
-           return -EOPNOTSUPP;
        if (map->port > 4)
            return -EINVAL;
        if (!map->port) {
@@ -1813,14 +1810,11 @@ static int
 do_open(struct net_device *dev)
 {
     local_info_t *lp = dev->priv;
-    dev_link_t *link;
+    dev_link_t *link = &lp->link;
 
     DEBUG(0, "do_open(%p)\n", dev);
 
     /* Check that the PCMCIA card is still here. */
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev)
-           break;
     /* Physical device present signature. */
     if (!DEV_OK(link))
        return -ENODEV;
@@ -1858,7 +1852,7 @@ do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        data[3] = mii_rd(ioaddr, data[0] & 0x1f, data[1] & 0x1f);
        break;
       case SIOCDEVPRIVATE+2:   /* Write the specified MII register */
-       if (!suser())
+       if (!capable(CAP_NET_ADMIN))
            return -EPERM;
        mii_wr(ioaddr, data[0] & 0x1f, data[1] & 0x1f, data[2], 16);
        break;
@@ -2064,7 +2058,7 @@ init_mii(struct net_device *dev)
 
     local->new_mii = (mii_rd(ioaddr, 0, 2) != 0xffff);
     
-    if (local->new_mii || local->probe_port)
+    if (local->probe_port)
        control = 0x1000; /* auto neg */
     else if (dev->if_port == 4)
        control = 0x2000; /* no auto neg, 100mbs mode */
@@ -2081,8 +2075,8 @@ init_mii(struct net_device *dev)
        return 0;
     }
 
-    if (local->new_mii || local->probe_port) {
-       /* according to the DP83840A specs the auto negotation process
+    if (local->probe_port) {
+       /* according to the DP83840A specs the auto negotiation process
         * may take up to 3.5 sec, so we use this also for our ML6692
         * Fixme: Better to use a timer here!
         */
@@ -2094,7 +2088,7 @@ init_mii(struct net_device *dev)
        }
 
        if (!(status & 0x0020)) {
-           printk(KERN_INFO "%s: auto negotation failed;"
+           printk(KERN_INFO "%s: autonegotiation failed;"
                   " using 10mbs\n", dev->name);
            if (!local->new_mii) {
                control = 0x0000;
@@ -2112,7 +2106,6 @@ init_mii(struct net_device *dev)
            } else
                dev->if_port = 1;
        }
-       local->probe_port = 0;
     }
 
   #ifdef PCMCIA_DEBUG
@@ -2140,13 +2133,11 @@ static int
 do_stop(struct net_device *dev)
 {
     ioaddr_t ioaddr = dev->base_addr;
-    dev_link_t *link;
+    local_info_t *lp = dev->priv;
+    dev_link_t *link = &lp->link;
 
     DEBUG(0, "do_stop(%p)\n", dev);
 
-    for (link = dev_list; link; link = link->next)
-       if (link->priv == dev)
-           break;
     if (!link)
        return -ENODEV;
 
index 269f5c3374c309d7cf7e8df467236315d97c2ea7..1c0a21146ed358d0165ffca9deb47ec045d47760 100644 (file)
@@ -2,7 +2,7 @@
 
     PCMCIA Bulk Memory Services
 
-    bulkmem.c 1.33 1999/10/25 20:03:33
+    bulkmem.c 1.34 1999/11/17 01:37:55
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -179,7 +179,7 @@ static void retry_erase(erase_busy_t *busy, u_int cause)
        }
        busy->client->event_callback_args.info = erase;
        EVENT(busy->client, CS_EVENT_ERASE_COMPLETE, CS_EVENT_PRI_LOW);
-       kfree_s(busy, sizeof(*busy));
+       kfree(busy);
        /* Resubmit anything waiting for a request to finish */
        wake_up_interruptible(&mtd->mtd_req);
        retry_erase_list(&mtd->erase_busy, 0);
@@ -484,6 +484,7 @@ int pcmcia_register_erase_queue(client_handle_t *handle, eraseq_hdr_t *header,
     if ((handle == NULL) || CHECK_HANDLE(*handle))
        return CS_BAD_HANDLE;
     queue = kmalloc(sizeof(*queue), GFP_KERNEL);
+    if (!queue) return CS_OUT_OF_RESOURCE;
     queue->eraseq_magic = ERASEQ_MAGIC;
     queue->handle = *handle;
     queue->count = header->QueueEntryCnt;
@@ -502,7 +503,7 @@ int pcmcia_deregister_erase_queue(eraseq_handle_t eraseq)
     if (i < eraseq->count)
        return CS_BUSY;
     eraseq->eraseq_magic = 0;
-    kfree_s(eraseq, sizeof(*eraseq));
+    kfree(eraseq);
     return CS_SUCCESS;
 } /* deregister_erase_queue */
 
index bb8fe17b2bbff3dbaab53c0281a0c6a149980208..0e5ddeb93039930648150a6a83820f83aae693ce 100644 (file)
@@ -1,8 +1,8 @@
 /*======================================================================
 
-    Cardbus device enabler
+    CardBus device enabler
 
-    cb_enabler.c 1.25 1999/10/25 20:03:33
+    cb_enabler.c 1.28 1999/12/09 20:57:37
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -58,11 +58,14 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"cb_enabler.c 1.25 1999/10/25 20:03:33 (David Hinds)";
+"cb_enabler.c 1.28 1999/12/09 20:57:37 (David Hinds)";
 #else
 #define DEBUG(n, args...) do { } while (0)
 #endif
 
+MODULE_AUTHOR("David Hinds <dhinds@pcmcia.sourceforge.org>");
+MODULE_DESCRIPTION("CardBus stub enabler module");
+
 /*====================================================================*/
 
 /* Parameters that can be set with 'insmod' */
@@ -126,10 +129,11 @@ struct dev_link_t *cb_attach(int n)
     
     DEBUG(0, "cb_attach(%d)\n", n);
 
-    MOD_INC_USE_COUNT;
     link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
-    memset(link, 0, sizeof(struct dev_link_t));
+    if (!link) return NULL;
 
+    MOD_INC_USE_COUNT;
+    memset(link, 0, sizeof(struct dev_link_t));
     link->conf.IntType = INT_CARDBUS;
     link->conf.Vcc = 33;
 
@@ -142,7 +146,7 @@ struct dev_link_t *cb_attach(int n)
     client_reg.dev_info = &driver[n].dev_info;
     client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
     client_reg.event_handler = &cb_event;
-    client_reg.EventMask =
+    client_reg.EventMask = CS_EVENT_RESET_PHYSICAL |
        CS_EVENT_RESET_REQUEST | CS_EVENT_CARD_RESET |
        CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
        CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
@@ -186,7 +190,7 @@ static void cb_detach(dev_link_t *link)
        pcmcia_deregister_client(link->handle);
     
     *linkp = link->next;
-    kfree_s(link, sizeof(struct dev_link_t));
+    kfree(link);
     MOD_DEC_USE_COUNT;
 }
 
index eb287bee990eb1a7d42633d273d6be9cdabe898a..acca173165fe0693ecf4d4c919fb11924e656c27 100644 (file)
@@ -2,7 +2,7 @@
 
     PCMCIA Card Information Structure parser
 
-    cistpl.c 1.74 1999/11/08 20:47:02
+    cistpl.c 1.77 2000/01/16 19:19:01
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -52,6 +52,7 @@
 #include <pcmcia/ss.h>
 #include <pcmcia/cs.h>
 #include <pcmcia/bulkmem.h>
+#include <pcmcia/cisreg.h>
 #include <pcmcia/cistpl.h>
 #include "cs_internal.h"
 #include "rsrc_mgr.h"
@@ -83,12 +84,15 @@ static const u_int exponent[] = {
     
 ======================================================================*/
 
+/* Bits in attr field */
+#define IS_ATTR                1
+#define IS_INDIRECT    8
+
 void read_cis_mem(socket_info_t *s, int attr, u_int addr,
                  u_int len, void *ptr)
 {
     pccard_mem_map *mem = &s->cis_mem;
-    u_char *sys;
-    u_int inc = 1;
+    u_char *sys, *buf = ptr;
     
     DEBUG(3, "cs: read_cis_mem(%d, %#x, %u)\n", attr, addr, len);
     if (setup_cis_mem(s) != 0) {
@@ -96,47 +100,81 @@ void read_cis_mem(socket_info_t *s, int attr, u_int addr,
        return;
     }
     mem->flags |= MAP_ACTIVE; mem->flags &= ~MAP_ATTRIB;
-    if (attr) { mem->flags |= MAP_ATTRIB; inc++; addr *= 2; }
-    sys = s->cis_virt + (addr & (s->cap.map_size-1));
-    mem->card_start = addr & ~(s->cap.map_size-1);
-
-    for (; len > 0; sys = s->cis_virt) {
+    sys = s->cis_virt;
+
+    if (attr & IS_INDIRECT) {
+       /* Indirect accesses use a bunch of special registers at fixed
+          locations in common memory */
+       u_char flags = ICTRL0_COMMON|ICTRL0_AUTOINC|ICTRL0_BYTEGRAN;
+       if (attr & IS_ATTR) { addr *= 2; flags = ICTRL0_AUTOINC; }
+       mem->card_start = 0;
        s->ss_entry->set_mem_map(s->sock, mem);
-       DEBUG(3,  "cs:  %#2.2x %#2.2x %#2.2x %#2.2x %#2.2x ...\n",
-             bus_readb(s->cap.bus, sys),
-             bus_readb(s->cap.bus, sys+inc),
-             bus_readb(s->cap.bus, sys+2*inc),
-             bus_readb(s->cap.bus, sys+3*inc),
-             bus_readb(s->cap.bus, sys+4*inc));
-       for ( ; len > 0; len--, ((u_char *)ptr)++, sys += inc) {
-           if (sys == s->cis_virt+s->cap.map_size) break;
-           *(u_char *)ptr = bus_readb(s->cap.bus, sys);
+       bus_writeb(s->cap.bus, flags, sys+CISREG_ICTRL0);
+       bus_writeb(s->cap.bus, addr & 0xff, sys+CISREG_IADDR0);
+       bus_writeb(s->cap.bus, (addr>>8) & 0xff, sys+CISREG_IADDR1);
+       bus_writeb(s->cap.bus, (addr>>16) & 0xff, sys+CISREG_IADDR2);
+       bus_writeb(s->cap.bus, (addr>>24) & 0xff, sys+CISREG_IADDR3);
+       for ( ; len > 0; len--, buf++)
+           *buf = bus_readb(s->cap.bus, sys+CISREG_IDATA0);
+    } else {
+       u_int inc = 1;
+       if (attr) { mem->flags |= MAP_ATTRIB; inc++; addr *= 2; }
+       sys += (addr & (s->cap.map_size-1));
+       mem->card_start = addr & ~(s->cap.map_size-1);
+
+       for (; len > 0; sys = s->cis_virt) {
+           s->ss_entry->set_mem_map(s->sock, mem);
+           for ( ; len > 0; len--, buf++, sys += inc) {
+               if (sys == s->cis_virt+s->cap.map_size) break;
+               *buf = bus_readb(s->cap.bus, sys);
+           }
+           mem->card_start += s->cap.map_size;
        }
-       mem->card_start += s->cap.map_size;
     }
+    DEBUG(3, "cs:  %#2.2x %#2.2x %#2.2x %#2.2x ...\n",
+         *(u_char *)(ptr+0), *(u_char *)(ptr+1),
+         *(u_char *)(ptr+2), *(u_char *)(ptr+3));
 }
 
 void write_cis_mem(socket_info_t *s, int attr, u_int addr,
                   u_int len, void *ptr)
 {
     pccard_mem_map *mem = &s->cis_mem;
-    u_char *sys;
-    int inc = 1;
+    u_char *sys, *buf = ptr;
     
     DEBUG(3, "cs: write_cis_mem(%d, %#x, %u)\n", attr, addr, len);
     if (setup_cis_mem(s) != 0) return;
-    mem->flags &= ~MAP_ATTRIB;
-    if (attr) { mem->flags |= MAP_ATTRIB; inc++; addr *= 2; }
-    sys = s->cis_virt + (addr & (s->cap.map_size-1));
-    mem->card_start = addr & ~(s->cap.map_size-1);
-    
-    for (; len > 0; sys = s->cis_virt) {
+    mem->flags |= MAP_ACTIVE; mem->flags &= ~MAP_ATTRIB;
+    sys = s->cis_virt;
+
+    if (attr & IS_INDIRECT) {
+       /* Indirect accesses use a bunch of special registers at fixed
+          locations in common memory */
+       u_char flags = ICTRL0_COMMON|ICTRL0_AUTOINC|ICTRL0_BYTEGRAN;
+       if (attr & IS_ATTR) { addr *= 2; flags = ICTRL0_AUTOINC; }
+       mem->card_start = 0;
        s->ss_entry->set_mem_map(s->sock, mem);
-       for ( ; len > 0; len--, ((u_char *)ptr)++, sys += inc) {
-           if (sys == s->cis_virt+s->cap.map_size) break;
-           bus_writeb(s->cap.bus, *(u_char *)ptr, sys);
+       bus_writeb(s->cap.bus, flags, sys+CISREG_ICTRL0);
+       bus_writeb(s->cap.bus, addr & 0xff, sys+CISREG_IADDR0);
+       bus_writeb(s->cap.bus, (addr>>8) & 0xff, sys+CISREG_IADDR1);
+       bus_writeb(s->cap.bus, (addr>>16) & 0xff, sys+CISREG_IADDR2);
+       bus_writeb(s->cap.bus, (addr>>24) & 0xff, sys+CISREG_IADDR3);
+       for ( ; len > 0; len--, buf++)
+           bus_writeb(s->cap.bus, *buf, sys+CISREG_IDATA0);
+    } else {
+       int inc = 1;
+       if (attr & IS_ATTR) { mem->flags |= MAP_ATTRIB; inc++; addr *= 2; }
+       sys += (addr & (s->cap.map_size-1));
+       mem->card_start = addr & ~(s->cap.map_size-1);
+
+       for (; len > 0; sys = s->cis_virt) {
+           s->ss_entry->set_mem_map(s->sock, mem);
+           for ( ; len > 0; len--, buf++, sys += inc) {
+               if (sys == s->cis_virt+s->cap.map_size) break;
+               bus_writeb(s->cap.bus, *buf, sys);
+           }
+           mem->card_start += s->cap.map_size;
        }
-       mem->card_start += s->cap.map_size;
     }
 }
 
@@ -342,10 +380,10 @@ int pcmcia_replace_cis(client_handle_t handle, cisdump_t *cis)
 ======================================================================*/
 
 typedef struct tuple_flags {
-    u_int              link_space:3;
+    u_int              link_space:4;
     u_int              has_link:1;
     u_int              mfc_fn:3;
-    u_int              space:3;
+    u_int              space:4;
 } tuple_flags;
 
 #define LINK_SPACE(f)  (((tuple_flags *)(&(f)))->link_space)
@@ -469,18 +507,24 @@ int pcmcia_get_next_tuple(client_handle_t handle, tuple_t *tuple)
            (link[0] == CISTPL_LONGLINK_C) ||
            (link[0] == CISTPL_LONGLINK_MFC) ||
            (link[0] == CISTPL_LINKTARGET) ||
+           (link[0] == CISTPL_INDIRECT) ||
            (link[0] == CISTPL_NO_LINK)) {
            switch (link[0]) {
            case CISTPL_LONGLINK_A:
                HAS_LINK(tuple->Flags) = 1;
-               LINK_SPACE(tuple->Flags) = 1;
+               LINK_SPACE(tuple->Flags) = attr | IS_ATTR;
                read_cis_cache(s, attr, ofs+2, 4, &tuple->LinkOffset);
                break;
            case CISTPL_LONGLINK_C:
                HAS_LINK(tuple->Flags) = 1;
-               LINK_SPACE(tuple->Flags) = 0;
+               LINK_SPACE(tuple->Flags) = attr & ~IS_ATTR;
                read_cis_cache(s, attr, ofs+2, 4, &tuple->LinkOffset);
                break;
+           case CISTPL_INDIRECT:
+               HAS_LINK(tuple->Flags) = 1;
+               LINK_SPACE(tuple->Flags) = IS_ATTR | IS_INDIRECT;
+               tuple->LinkOffset = 0;
+               break;
            case CISTPL_LONGLINK_MFC:
                tuple->LinkOffset = ofs + 3;
                LINK_SPACE(tuple->Flags) = attr;
index af28f4ef5cb5f5fbf24609b35bb5a190bdcbabe6..bd671c1b258bd3bec3b039f111eebd829e684103 100644 (file)
@@ -2,7 +2,7 @@
 
     PCMCIA Card Services -- core services
 
-    cs.c 1.235 1999/11/11 17:52:05
+    cs.c 1.247 2000/01/15 04:30:35
     
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -59,7 +59,6 @@
 #include <pcmcia/cistpl.h>
 #include <pcmcia/cisreg.h>
 #include <pcmcia/bus_ops.h>
-
 #include "cs_internal.h"
 #include "rsrc_mgr.h"
 
@@ -72,28 +71,40 @@ static int handle_apm_event(apm_event_t event);
 int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 static const char *version =
-"cs.c 1.235 1999/11/11 17:52:05 (David Hinds)";
+"cs.c 1.247 2000/01/15 04:30:35 (David Hinds)";
 #endif
 
-static const char *release = "Linux PCMCIA Card Services " CS_RELEASE;
-#ifdef MODULE
-static const char *kernel = "kernel build: " UTS_RELEASE " " UTS_VERSION;
-#endif
-static const char *options = "options: "
 #ifdef CONFIG_PCI
-" [pci]"
+#define PCI_OPT " [pci]"
+#else
+#define PCI_OPT ""
 #endif
 #ifdef CONFIG_CARDBUS
-" [cardbus]"
+#define CB_OPT " [cardbus]"
+#else
+#define CB_OPT ""
 #endif
 #ifdef CONFIG_APM
-" [apm]"
+#define APM_OPT " [apm]"
+#else
+#define APM_OPT ""
 #endif
 #if !defined(CONFIG_CARDBUS) && !defined(CONFIG_PCI) && \
-    !defined(CONFIG_APM) && !defined(CONFIG_PNP_BIOS)
-" none"
+    !defined(CONFIG_APM)
+#define OPTIONS " none"
+#else
+#define OPTIONS PCI_OPT CB_OPT APM_OPT
 #endif
-;
+
+static const char *release = "Linux PCMCIA Card Services " CS_RELEASE;
+#ifdef MODULE
+static const char *kernel = "kernel build: " UTS_RELEASE " " UTS_VERSION;
+#endif
+static const char *options = "options: " OPTIONS;
+
+MODULE_AUTHOR("David Hinds <dhinds@pcmcia.sourceforge.org>");
+MODULE_DESCRIPTION("Linux PCMCIA Card Services " CS_RELEASE
+                  "\n  options:" OPTIONS);
 
 /*====================================================================*/
 
@@ -263,11 +274,6 @@ static int set_socket(socket_info_t *s, socket_state_t *state)
        return s->ss_entry->set_socket(s->sock, state);
 }
 
-static int get_io_map(socket_info_t *s, struct pccard_io_map *io)
-{
-       return s->ss_entry->get_io_map(s->sock, io);
-}
-
 static int set_io_map(socket_info_t *s, struct pccard_io_map *io)
 {
        return s->ss_entry->set_io_map(s->sock, io);
@@ -734,18 +740,18 @@ static int alloc_io_space(socket_info_t *s, u_int attr, ioaddr_t *base,
     int i;
     ioaddr_t try, align;
 
-    align = (*base) ? (1<<lines) : 1;
+    align = (*base) ? (lines ? 1<<lines : 0) : 1;
     if (align && (align < num)) {
-       printk(KERN_INFO "odd IO request: num %04x align %04x\n",
-              num, align);
-       if (*base)
+       if (*base) {
+           DEBUG(0, "odd IO request: num %04x align %04x\n",
+                 num, align);
            align = 0;
-       else
+       else
            while (align && (align < num)) align <<= 1;
     }
-    if (align && (*base & (align-1))) {
-       printk(KERN_INFO "odd IO request: base %04x align %04x\n",
-              *base, align);
+    if (*base & ~(align-1)) {
+       DEBUG(0, "odd IO request: base %04x align %04x\n",
+             *base, align);
        align = 0;
     }
     for (i = 0; i < MAX_IO_WIN; i++) {
@@ -862,6 +868,7 @@ int pcmcia_bind_device(bind_req_t *req)
     s = SOCKET(req);
 
     client = (client_t *)kmalloc(sizeof(client_t), GFP_KERNEL);
+    if (!client) return CS_OUT_OF_RESOURCE;
     memset(client, '\0', sizeof(client_t));
     client->client_magic = CLIENT_MAGIC;
     strncpy(client->dev_info, (char *)req->dev_info, DEV_NAME_LEN);
@@ -1122,7 +1129,7 @@ int pcmcia_get_window(window_handle_t *handle, int idx, win_req_t *req)
     if (win->ctl.flags & MAP_ACTIVE)
        req->Attributes |= WIN_ENABLE;
     if (win->ctl.flags & MAP_16BIT)
-       req->Attributes |= WIN_DATA_WIDTH;
+       req->Attributes |= WIN_DATA_WIDTH_16;
     if (win->ctl.flags & MAP_USE_WAIT)
        req->Attributes |= WIN_USE_WAIT;
     *handle = win;
@@ -1331,7 +1338,7 @@ int pcmcia_modify_window(window_handle_t win, modwin_t *req)
        win->ctl.flags |= MAP_ATTRIB;
     if (req->Attributes & WIN_ENABLE)
        win->ctl.flags |= MAP_ACTIVE;
-    if (req->Attributes & WIN_DATA_WIDTH)
+    if (req->Attributes & WIN_DATA_WIDTH_16)
        win->ctl.flags |= MAP_16BIT;
     if (req->Attributes & WIN_USE_WAIT)
        win->ctl.flags |= MAP_USE_WAIT;
@@ -1426,7 +1433,7 @@ int pcmcia_register_client(client_handle_t *handle, client_reg_t *req)
 
 int pcmcia_release_configuration(client_handle_t handle)
 {
-    pccard_io_map io;
+    pccard_io_map io = { 0, 0, 0, 0, 1 };
     socket_info_t *s;
     int i;
     
@@ -1460,8 +1467,6 @@ int pcmcia_release_configuration(client_handle_t handle)
                if (s->io[i].Config != 0)
                    continue;
                io.map = i;
-               get_io_map(s, &io);
-               io.flags &= ~MAP_ACTIVE;
                set_io_map(s, &io);
            }
        c->state &= ~CONFIG_LOCKED;
@@ -1863,7 +1868,8 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
 {
     socket_info_t *s;
     window_t *win;
-    int w, align;
+    u_long align;
+    int w;
     
     if (CHECK_HANDLE(*handle))
        return CS_BAD_HANDLE;
@@ -1873,16 +1879,25 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
     if (req->Attributes & (WIN_PAGED | WIN_SHARED))
        return CS_BAD_ATTRIBUTE;
 
-    for (w = 0; w < MAX_WIN; w++)
-       if (!(s->state & SOCKET_WIN_REQ(w))) break;
-    if (w == MAX_WIN)
-       return CS_OUT_OF_RESOURCE;
-
     /* Window size defaults to smallest available */
     if (req->Size == 0)
        req->Size = s->cap.map_size;
+    align = (((s->cap.features & SS_CAP_MEM_ALIGN) ||
+             (req->Attributes & WIN_STRICT_ALIGN)) ?
+            req->Size : s->cap.map_size);
+    if (req->Size & (s->cap.map_size-1))
+       return CS_BAD_SIZE;
+    if (req->Base & (align-1))
+       return CS_BAD_BASE;
+    if (req->Base)
+       align = 0;
     
     /* Allocate system memory window */
+    for (w = 0; w < MAX_WIN; w++)
+       if (!(s->state & SOCKET_WIN_REQ(w))) break;
+    if (w == MAX_WIN)
+       return CS_OUT_OF_RESOURCE;
+
     win = &s->win[w];
     win->magic = WINDOW_MAGIC;
     win->index = w;
@@ -1890,10 +1905,8 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
     win->sock = s;
     win->base = req->Base;
     win->size = req->Size;
-    align = ((s->cap.features & SS_CAP_MEM_ALIGN) ||
-            (req->Attributes & WIN_STRICT_ALIGN));
-    if (find_mem_region(&win->base, win->size,
-                       (align ? req->Size : s->cap.map_size),
+       
+    if (find_mem_region(&win->base, win->size, align,
                        (req->Attributes & WIN_MAP_BELOW_1MB) ||
                        !(s->cap.features & SS_CAP_PAGE_REGS),
                        (*handle)->dev_info))
@@ -1909,7 +1922,7 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle
        win->ctl.flags |= MAP_ATTRIB;
     if (req->Attributes & WIN_ENABLE)
        win->ctl.flags |= MAP_ACTIVE;
-    if (req->Attributes & WIN_DATA_WIDTH)
+    if (req->Attributes & WIN_DATA_WIDTH_16)
        win->ctl.flags |= MAP_16BIT;
     if (req->Attributes & WIN_USE_WAIT)
        win->ctl.flags |= MAP_USE_WAIT;
index 92e67f19085e7b11623a7d6c154ee288bca78cff..f85e2b4f95b41ec968da539b68be5d98ad7fb0fb 100644 (file)
@@ -2,7 +2,7 @@
 
     PC Card Driver Services
     
-    ds.c 1.100 1999/11/08 20:47:02
+    ds.c 1.104 2000/01/11 01:18:02
     
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -60,11 +60,14 @@ int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static const char *version =
-"ds.c 1.100 1999/11/08 20:47:02 (David Hinds)";
+"ds.c 1.104 2000/01/11 01:18:02 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
 
+MODULE_AUTHOR("David Hinds <dhinds@pcmcia.sourceforge.org>");
+MODULE_DESCRIPTION("PCMCIA Driver Services " CS_RELEASE);
+
 /*====================================================================*/
 
 typedef struct driver_info_t {
@@ -155,6 +158,7 @@ int register_pccard_driver(dev_info_t *dev_info,
            break;
     if (!driver) {
        driver = kmalloc(sizeof(driver_info_t), GFP_KERNEL);
+       if (!driver) return -ENOMEM;
        strncpy(driver->dev_info, (char *)dev_info, DEV_NAME_LEN);
        driver->use_count = 0;
        driver->status = init_status;
@@ -193,7 +197,7 @@ int unregister_pccard_driver(dev_info_t *dev_info)
                            DEV_NAME_LEN) != 0))
        d = &(*d)->next;
     if (*d == NULL)
-       return -1;
+       return -ENODEV;
     
     target = *d;
     if (target->use_count == 0) {
@@ -377,6 +381,7 @@ static int bind_request(int i, bind_info_t *bind_info)
            break;
     if (driver == NULL) {
        driver = kmalloc(sizeof(driver_info_t), GFP_KERNEL);
+       if (!driver) return -ENOMEM;
        strncpy(driver->dev_info, bind_info->dev_info, DEV_NAME_LEN);
        driver->use_count = 0;
        driver->next = root_driver;
@@ -522,11 +527,11 @@ static int unbind_request(int i, bind_info_t *bind_info)
            for (d = &root_driver; *d; d = &((*d)->next))
                if (c->driver == *d) break;
            *d = (*d)->next;
-           kfree_s(c->driver, sizeof(driver_info_t));
+           kfree(c->driver);
        }
     }
     *b = c->next;
-    kfree_s(c, sizeof(socket_bind_t));
+    kfree(c);
     
     return 0;
 } /* unbind_request */
@@ -554,8 +559,9 @@ static int ds_open(struct inode *inode, struct file *file)
            s->state |= SOCKET_BUSY;
     }
     
-    MOD_INC_USE_COUNT;
     user = kmalloc(sizeof(user_info_t), GFP_KERNEL);
+    if (!user) return -ENOMEM;
+    MOD_INC_USE_COUNT;
     user->event_tail = user->event_head = 0;
     user->next = s->user;
     user->user_magic = USER_MAGIC;
@@ -593,7 +599,7 @@ static int ds_release(struct inode *inode, struct file *file)
        return 0;
     *link = user->next;
     user->user_magic = 0;
-    kfree_s(user, sizeof(user_info_t));
+    kfree(user);
     
     MOD_DEC_USE_COUNT;
     return 0;
@@ -704,7 +710,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     if (size > sizeof(ds_ioctl_arg_t)) return -EINVAL;
 
     /* Permission check */
-    if (!(cmd & IOC_OUT) && !suser())
+    if (!(cmd & IOC_OUT) && !capable(CAP_SYS_ADMIN))
        return -EPERM;
        
     if (cmd & IOC_IN) {
@@ -773,7 +779,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
        ret = pcmcia_insert_card(s->handle, NULL);
        break;
     case DS_ACCESS_CONFIGURATION_REGISTER:
-       if ((buf.conf_reg.Action == CS_WRITE) && !suser())
+       if ((buf.conf_reg.Action == CS_WRITE) && !capable(CAP_SYS_ADMIN))
            return -EPERM;
        ret = pcmcia_access_configuration_register(s->handle, &buf.conf_reg);
        break;
@@ -798,7 +804,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
        ret = pcmcia_replace_cis(s->handle, &buf.cisdump);
        break;
     case DS_BIND_REQUEST:
-       if (!suser()) return -EPERM;
+       if (!capable(CAP_SYS_ADMIN)) return -EPERM;
        err = bind_request(i, &buf.bind_info);
        break;
     case DS_GET_DEVICE_INFO:
@@ -847,17 +853,12 @@ static int ds_ioctl(struct inode * inode, struct file * file,
 /*====================================================================*/
 
 static struct file_operations ds_fops = {
-    NULL,              /* lseek */
-    ds_read,           /* read */
-    ds_write,          /* write */
-    NULL,              /* readdir */
-    ds_poll,           /* poll */
-    ds_ioctl,          /* ioctl */
-    NULL,              /* mmap */
-    ds_open,           /* open */
-    NULL,              /* flush */
-    ds_release,                /* release */
-    NULL               /* fsync */
+    open:      ds_open,
+    release:   ds_release,
+    ioctl:     ds_ioctl,
+    read:      ds_read,
+    write:     ds_write,
+    poll:      ds_poll
 };
 
 EXPORT_SYMBOL(register_pccard_driver);
@@ -887,6 +888,7 @@ int __init init_pcmcia_ds(void)
     
     sockets = serv.Count;
     socket_table = kmalloc(sockets*sizeof(socket_info_t), GFP_KERNEL);
+    if (!socket_table) return -1;
     for (i = 0, s = socket_table; i < sockets; i++, s++) {
        s->state = 0;
        s->user = NULL;
index d109da3b3dfde541c14e61d16f3e801dda5c7e43..73c177d8dcc2cbaf8d38f2c7d76bef61a1b27ac0 100644 (file)
@@ -61,6 +61,7 @@
 #include "i82365.h"
 #include "cirrus.h"
 #include "vg468.h"
+#include "ricoh.h"
 #include "o2micro.h"
 
 /* PCI-bus controllers */
index d8474b3f6b9882a485b900353efcc6f626c2f441..8db7c68b534e754d352fb26c16aa490f3b73b2fd 100644 (file)
@@ -4,6 +4,9 @@
  * (C) Copyright 1999 Linus Torvalds
  */
 
+#ifndef __PCI_SOCKET_H
+#define __PCI_SOCKET_H
+
 struct pci_socket_ops;
 
 typedef struct pci_socket {
@@ -40,3 +43,4 @@ struct pci_socket_ops {
 extern struct pci_socket_ops yenta_operations;
 extern struct pci_socket_ops ricoh_operations;
 
+#endif
index b3c3bfd687ea871f11222b13ba8e3ff0e69313e3..3084dd5b9ac462c2312c032b2b430475cd3c4558 100644 (file)
 #define  RL5C4XX_HOLD_MASK             0x1c00
 #define  RL5C4XX_HOLD_SHIFT            10
 
-#ifdef CONFIG_CARDBUS
+#ifdef __YENTA_H
 
 #define rl_misc(socket)                ((socket)->private[0])
 #define rl_ctl(socket)         ((socket)->private[1])
index 569ff867828403aa3dc7e803b911da8677c95025..d059c4fdbc1875cd9fba22572f66aaff9802cd9d 100644 (file)
@@ -2,7 +2,7 @@
 
     Resource management routines
 
-    rsrc_mgr.c 1.76 1999/11/08 20:47:02
+    rsrc_mgr.c 1.77 1999/11/16 03:32:59
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -124,10 +124,11 @@ static int add_interval(resource_map_t *map, u_long base, u_long num)
            break;
     }
     q = kmalloc(sizeof(resource_map_t), GFP_KERNEL);
+    if (!q) return CS_OUT_OF_RESOURCE;
     q->base = base; q->num = num;
     q->next = p->next; p->next = q;
-    return 0;
-} /* add_interval */
+    return CS_SUCCESS;
+}
 
 /*====================================================================*/
 
@@ -158,6 +159,7 @@ static int sub_interval(resource_map_t *map, u_long base, u_long num)
            } else {
                /* Split the block into two pieces */
                p = kmalloc(sizeof(resource_map_t), GFP_KERNEL);
+               if (!p) return CS_OUT_OF_RESOURCE;
                p->base = base+num;
                p->num = q->base+q->num - p->base;
                q->num = base - q->base;
@@ -165,8 +167,8 @@ static int sub_interval(resource_map_t *map, u_long base, u_long num)
            }
        }
     }
-    return 0;
-} /* sub_interval */
+    return CS_SUCCESS;
+}
 
 /*======================================================================
 
@@ -383,7 +385,7 @@ int find_io_region(ioaddr_t *base, ioaddr_t num, ioaddr_t align,
        }
     }
     return -1;
-} /* find_io_region */
+}
 
 int find_mem_region(u_long *base, u_long num, u_long align,
                    int force_low, char *name)
@@ -411,7 +413,7 @@ int find_mem_region(u_long *base, u_long num, u_long align,
        force_low++;
     }
     return -1;
-} /* find_mem_region */
+}
 
 /*======================================================================
 
@@ -482,7 +484,7 @@ int try_irq(u_int Attributes, int irq, int specific)
        }
     }
     return 0;
-} /* try_irq */
+}
 
 #endif
 
@@ -524,34 +526,35 @@ void undo_irq(u_int Attributes, int irq)
 static int adjust_memory(adjust_t *adj)
 {
     u_long base, num;
-    int i;
+    int i, ret;
 
     base = adj->resource.memory.Base;
     num = adj->resource.memory.Size;
     if ((num == 0) || (base+num-1 < base))
        return CS_BAD_SIZE;
 
+    ret = CS_SUCCESS;
     switch (adj->Action) {
     case ADD_MANAGED_RESOURCE:
-       if (add_interval(&mem_db, base, num) != 0)
-           return CS_IN_USE;
+       ret = add_interval(&mem_db, base, num);
        break;
     case REMOVE_MANAGED_RESOURCE:
-       sub_interval(&mem_db, base, num);
-       for (i = 0; i < sockets; i++) {
-           release_cis_mem(socket_table[i]);
+       ret = sub_interval(&mem_db, base, num);
+       if (ret == CS_SUCCESS) {
+           for (i = 0; i < sockets; i++) {
+               release_cis_mem(socket_table[i]);
 #ifdef CONFIG_CARDBUS
-           cb_release_cis_mem(socket_table[i]);
+               cb_release_cis_mem(socket_table[i]);
 #endif
+           }
        }
        break;
     default:
-       return CS_UNSUPPORTED_FUNCTION;
-       break;
+       ret = CS_UNSUPPORTED_FUNCTION;
     }
     
-    return CS_SUCCESS;
-} /* adjust_mem */
+    return ret;
+}
 
 /*====================================================================*/
 
@@ -584,7 +587,7 @@ static int adjust_io(adjust_t *adj)
     }
 
     return CS_SUCCESS;
-} /* adjust_io */
+}
 
 /*====================================================================*/
 
@@ -625,7 +628,7 @@ static int adjust_irq(adjust_t *adj)
     }
 #endif
     return CS_SUCCESS;
-} /* adjust_irq */
+}
 
 /*====================================================================*/
 
@@ -646,7 +649,7 @@ int pcmcia_adjust_resource_info(client_handle_t handle, adjust_t *adj)
        break;
     }
     return CS_UNSUPPORTED_FUNCTION;
-} /* adjust_resource_info */
+}
 
 /*====================================================================*/
 
index d5900c6f8c10efddc7b6db2c471f7b5661ef76a6..ff25ac893ae443befe778006e61d4a0e4f518fe2 100644 (file)
@@ -2,7 +2,7 @@
 
     Device driver for Databook TCIC-2 PCMCIA controller
 
-    tcic.c 1.107 1999/10/25 20:03:34
+    tcic.c 1.108 1999/12/09 20:17:29
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
 static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 static const char *version =
-"tcic.c 1.107 1999/10/25 20:03:34 (David Hinds)";
+"tcic.c 1.108 1999/12/09 20:17:29 (David Hinds)";
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 #else
 #define DEBUG(n, args...)
 #endif
 
+MODULE_AUTHOR("David Hinds <dhinds@pcmcia.sourceforge.org>");
+MODULE_DESCRIPTION("Databook TCIC-2 PCMCIA socket driver");
+
 /*====================================================================*/
 
 /* Parameters that can be set with 'insmod' */
index 64530c398b3385c298926571cc5db30b7a5faaf2..1a209c14e5dee4d0c180e841b508b3f3c7b5187b 100644 (file)
@@ -31,6 +31,7 @@
 
 #define IDESCSI_VERSION "0.9"
 
+#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/string.h>
index b4b14362c4f54dd819ee0b4fada54e09e8fa1663..b615f8a38d6772ee851b1d210e0dd98d5e95a9f8 100644 (file)
 
 #include <linux/config.h>
 #include <linux/module.h>
-#ifdef MODULE
-/*
- * This is a variable in scsi.c that is set when we are processing something
- * after boot time.  By definition, this is true when we are a loadable module
- * ourselves.
- */
-#define MODULE_FLAG 1
-#else
-#define MODULE_FLAG scsi_loadable_module_flag
-#endif                         /* MODULE */
 
 #include <linux/fs.h>
 #include <linux/kernel.h>
@@ -501,16 +491,6 @@ static struct gendisk *sd_gendisks = &sd_gendisk;
 #define SD_GENDISK(i)    sd_gendisks[(i) / SCSI_DISKS_PER_MAJOR]
 #define LAST_SD_GENDISK  sd_gendisks[N_USED_SD_MAJORS - 1]
 
-static void sd_geninit(void)
-{
-       int i;
-
-       for (i = 0; i < sd_template.dev_max; ++i)
-               if (rscsi_disks[i].device)
-                       grok_partitions(&SD_GENDISK(i), i%SCSI_DISKS_PER_MAJOR,
-                                       1<<4, rscsi_disks[i].capacity);
-}
-
 /*
  * rw_intr is the interrupt routine for the device driver.
  * It will be notified on the end of a SCSI read / write, and
@@ -1024,7 +1004,6 @@ static int sd_init()
        }
 
        LAST_SD_GENDISK.next = NULL;
-       sd_geninit();
        return 0;
 }
 
@@ -1045,16 +1024,15 @@ static void sd_finish()
                gendisk_head = sd_gendisks;
        }
        for (i = 0; i < sd_template.dev_max; ++i)
-               if (!rscsi_disks[i].capacity &&
-                   rscsi_disks[i].device) {
-                       if (MODULE_FLAG
-                           && !rscsi_disks[i].has_part_table) {
+               if (!rscsi_disks[i].capacity && rscsi_disks[i].device) {
+                       sd_init_onedisk(i);
+                       if (!rscsi_disks[i].has_part_table) {
                                sd_sizes[i << 4] = rscsi_disks[i].capacity;
-                               /* revalidate does sd_init_onedisk via MAYBE_REINIT */
-                               revalidate_scsidisk(MKDEV_SD(i), 0);
-                       } else
-                               i = sd_init_onedisk(i);
-                       rscsi_disks[i].has_part_table = 1;
+                               register_disk(&SD_GENDISK(i), MKDEV_SD(i),
+                                               1<<4, &sd_fops,
+                                               rscsi_disks[i].capacity);
+                               rscsi_disks[i].has_part_table = 1;
+                       }
                }
        /* If our host adapter is capable of scatter-gather, then we increase
         * the read-ahead to 60 blocks (120 sectors).  If not, we use
@@ -1207,6 +1185,7 @@ static void sd_detach(Scsi_Device * SDp)
                                sd_gendisks->part[index].nr_sects = 0;
                                sd_sizes[index] = 0;
                        }
+                       /* unregister_disk() */
                        dpnt->has_part_table = 0;
                        dpnt->device = NULL;
                        dpnt->capacity = 0;
index 89fcbf2b639f2a0d0f36f8fd8d9d7b21712e68b2..acea8e22fb7a496c4e6b8c47ed24ac1f23a54f0d 100644 (file)
  *    03.09.1999   0.30  change read semantics for MIDI to match
  *                       OSS more closely; remove possible wakeup race
  *    28.10.1999   0.31  More waitqueue races fixed
+ *    08.01.2000   0.32  Prevent some ioctl's from returning bad count values on underrun/overrun;
+ *                       Tim Janik's BSE (Bedevilled Sound Engine) found this
  *
  * some important things missing in Ensoniq documentation:
  *
@@ -1331,6 +1333,7 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
        unsigned long flags;
         audio_buf_info abinfo;
         count_info cinfo;
+       int count;
        int val, mapped, ret;
 
        VALIDATE_STATE(s);
@@ -1508,7 +1511,10 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
                abinfo.fragsize = s->dma_dac2.fragsize;
-                abinfo.bytes = s->dma_dac2.dmasize - s->dma_dac2.count;
+               count = s->dma_dac2.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = s->dma_dac2.dmasize - count;
                 abinfo.fragstotal = s->dma_dac2.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_dac2.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -1522,7 +1528,10 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
                abinfo.fragsize = s->dma_adc.fragsize;
-                abinfo.bytes = s->dma_adc.count;
+               count = s->dma_adc.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = count;
                 abinfo.fragstotal = s->dma_adc.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -1537,9 +1546,11 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                        return -EINVAL;
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
-                val = s->dma_dac2.count;
+                count = s->dma_dac2.count;
                spin_unlock_irqrestore(&s->lock, flags);
-               return put_user(val, (int *)arg);
+               if (count < 0)
+                       count = 0;
+               return put_user(count, (int *)arg);
 
         case SNDCTL_DSP_GETIPTR:
                if (!(file->f_mode & FMODE_READ))
@@ -1547,7 +1558,10 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
                 cinfo.bytes = s->dma_adc.total_bytes;
-                cinfo.blocks = s->dma_adc.count >> s->dma_adc.fragshift;
+               count = s->dma_adc.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_adc.fragshift;
                 cinfo.ptr = s->dma_adc.hwptr;
                if (s->dma_adc.mapped)
                        s->dma_adc.count &= s->dma_adc.fragsize-1;
@@ -1560,7 +1574,10 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
                 cinfo.bytes = s->dma_dac2.total_bytes;
-                cinfo.blocks = s->dma_dac2.count >> s->dma_dac2.fragshift;
+               count = s->dma_dac2.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_dac2.fragshift;
                 cinfo.ptr = s->dma_dac2.hwptr;
                if (s->dma_dac2.mapped)
                        s->dma_dac2.count &= s->dma_dac2.fragsize-1;
@@ -1853,6 +1870,7 @@ static int es1370_ioctl_dac(struct inode *inode, struct file *file, unsigned int
        unsigned long flags;
         audio_buf_info abinfo;
         count_info cinfo;
+       int count;
        unsigned ctrl;
        int val, ret;
 
@@ -1961,7 +1979,10 @@ static int es1370_ioctl_dac(struct inode *inode, struct file *file, unsigned int
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
                abinfo.fragsize = s->dma_dac1.fragsize;
-                abinfo.bytes = s->dma_dac1.dmasize - s->dma_dac1.count;
+               count = s->dma_dac1.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = s->dma_dac1.dmasize - count;
                 abinfo.fragstotal = s->dma_dac1.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_dac1.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -1974,9 +1995,11 @@ static int es1370_ioctl_dac(struct inode *inode, struct file *file, unsigned int
         case SNDCTL_DSP_GETODELAY:
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
-                val = s->dma_dac1.count;
+                count = s->dma_dac1.count;
                spin_unlock_irqrestore(&s->lock, flags);
-               return put_user(val, (int *)arg);
+               if (count < 0)
+                       count = 0;
+               return put_user(count, (int *)arg);
 
         case SNDCTL_DSP_GETOPTR:
                if (!(file->f_mode & FMODE_WRITE))
@@ -1984,7 +2007,10 @@ static int es1370_ioctl_dac(struct inode *inode, struct file *file, unsigned int
                spin_lock_irqsave(&s->lock, flags);
                es1370_update_ptr(s);
                 cinfo.bytes = s->dma_dac1.total_bytes;
-                cinfo.blocks = s->dma_dac1.count >> s->dma_dac1.fragshift;
+               count = s->dma_dac1.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_dac1.fragshift;
                 cinfo.ptr = s->dma_dac1.hwptr;
                if (s->dma_dac1.mapped)
                        s->dma_dac1.count &= s->dma_dac1.fragsize-1;
@@ -2444,7 +2470,7 @@ static int __init init_es1370(void)
 
        if (!pci_present())   /* No PCI bus in this machine! */
                return -ENODEV;
-       printk(KERN_INFO "es1370: version v0.31 time " __TIME__ " " __DATE__ "\n");
+       printk(KERN_INFO "es1370: version v0.32 time " __TIME__ " " __DATE__ "\n");
        while (index < NR_DEVICE && 
               (pcidev = pci_find_device(PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1370, pcidev))) {
                if (!RSRCISIOREGION(pcidev, 0))
index 2ef9d0bf576b7d05bf7f0a698c62bb4b0fc1dd5b..1a4844d47c254e0fda7c56133d9d075279f4c1a4 100644 (file)
@@ -96,6 +96,8 @@
  *                       detect ES137x chip and derivatives.
  *    05.01.2000   0.22  Should now work with rev7 boards; patch by
  *                       Eric Lemar, elemar@cs.washington.edu
+ *    08.01.2000   0.23  Prevent some ioctl's from returning bad count values on underrun/overrun;
+ *                       Tim Janik's BSE (Bedevilled Sound Engine) found this
  */
 
 /*****************************************************************************/
@@ -1911,6 +1913,7 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
        unsigned long flags;
         audio_buf_info abinfo;
         count_info cinfo;
+       int count;
        int val, mapped, ret;
 
        VALIDATE_STATE(s);
@@ -2085,7 +2088,10 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
                abinfo.fragsize = s->dma_dac2.fragsize;
-                abinfo.bytes = s->dma_dac2.dmasize - s->dma_dac2.count;
+               count = s->dma_dac2.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = s->dma_dac2.dmasize - count;
                 abinfo.fragstotal = s->dma_dac2.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_dac2.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -2099,7 +2105,10 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
                abinfo.fragsize = s->dma_adc.fragsize;
-                abinfo.bytes = s->dma_adc.count;
+               count = s->dma_adc.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = count;
                 abinfo.fragstotal = s->dma_adc.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -2114,9 +2123,11 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                        return -EINVAL;
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
-                val = s->dma_dac2.count;
+                count = s->dma_dac2.count;
                spin_unlock_irqrestore(&s->lock, flags);
-               return put_user(val, (int *)arg);
+               if (count < 0)
+                       count = 0;
+               return put_user(count, (int *)arg);
 
         case SNDCTL_DSP_GETIPTR:
                if (!(file->f_mode & FMODE_READ))
@@ -2124,7 +2135,10 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
                 cinfo.bytes = s->dma_adc.total_bytes;
-                cinfo.blocks = s->dma_adc.count >> s->dma_adc.fragshift;
+               count = s->dma_adc.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_adc.fragshift;
                 cinfo.ptr = s->dma_adc.hwptr;
                if (s->dma_adc.mapped)
                        s->dma_adc.count &= s->dma_adc.fragsize-1;
@@ -2137,7 +2151,10 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
                 cinfo.bytes = s->dma_dac2.total_bytes;
-                cinfo.blocks = s->dma_dac2.count >> s->dma_dac2.fragshift;
+               count = s->dma_dac2.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_dac2.fragshift;
                 cinfo.ptr = s->dma_dac2.hwptr;
                if (s->dma_dac2.mapped)
                        s->dma_dac2.count &= s->dma_dac2.fragsize-1;
@@ -2430,6 +2447,7 @@ static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int
        unsigned long flags;
         audio_buf_info abinfo;
         count_info cinfo;
+       int count;
        int val, ret;
 
        VALIDATE_STATE(s);
@@ -2529,7 +2547,10 @@ static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
                abinfo.fragsize = s->dma_dac1.fragsize;
-                abinfo.bytes = s->dma_dac1.dmasize - s->dma_dac1.count;
+               count = s->dma_dac1.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = s->dma_dac1.dmasize - count;
                 abinfo.fragstotal = s->dma_dac1.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_dac1.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -2542,9 +2563,11 @@ static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int
         case SNDCTL_DSP_GETODELAY:
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
-                val = s->dma_dac1.count;
+                count = s->dma_dac1.count;
                spin_unlock_irqrestore(&s->lock, flags);
-               return put_user(val, (int *)arg);
+               if (count < 0)
+                       count = 0;
+               return put_user(count, (int *)arg);
 
         case SNDCTL_DSP_GETOPTR:
                if (!(file->f_mode & FMODE_WRITE))
@@ -2552,7 +2575,10 @@ static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int
                spin_lock_irqsave(&s->lock, flags);
                es1371_update_ptr(s);
                 cinfo.bytes = s->dma_dac1.total_bytes;
-                cinfo.blocks = s->dma_dac1.count >> s->dma_dac1.fragshift;
+               count = s->dma_dac1.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_dac1.fragshift;
                 cinfo.ptr = s->dma_dac1.hwptr;
                if (s->dma_dac1.mapped)
                        s->dma_dac1.count &= s->dma_dac1.fragsize-1;
@@ -3229,7 +3255,7 @@ static int __init init_es1371(void)
 
        if (!pci_present())   /* No PCI bus in this machine! */
                return -ENODEV;
-       printk(KERN_INFO "es1371: version v0.22 time " __TIME__ " " __DATE__ "\n");
+       printk(KERN_INFO "es1371: version v0.23 time " __TIME__ " " __DATE__ "\n");
        while (index < NR_DEVICE && (pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev))) {
                if (pcidev->vendor == PCI_VENDOR_ID_ENSONIQ) {
                        if (pcidev->device != PCI_DEVICE_ID_ENSONIQ_ES1371 &&
index 2d33c895a7c586efc2a1f5bda83f41662f0574ba..255efbc2bc0d5527873844913eac99079561043f 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *      esssolo1.c  --  ESS Technology Solo1 (ES1946) audio driver.
  *
- *      Copyright (C) 1998-1999  Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *      Copyright (C) 1998-2000  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
  *  /dev/midi   simple MIDI UART interface, no ioctl
  *
  *  Revision history
- *    10.11.98   0.1   Initial release (without any hardware)
- *    22.03.99   0.2   cinfo.blocks should be reset after GETxPTR ioctl.
- *                     reported by Johan Maes <joma@telindus.be>
- *                     return EAGAIN instead of EBUSY when O_NONBLOCK
- *                     read/write cannot be executed
- *    07.04.99   0.3   implemented the following ioctl's: SOUND_PCM_READ_RATE, 
- *                     SOUND_PCM_READ_CHANNELS, SOUND_PCM_READ_BITS; 
- *                     Alpha fixes reported by Peter Jones <pjones@redhat.com>
- *    15.06.99   0.4   Fix bad allocation bug.
- *                     Thanks to Deti Fliegl <fliegl@in.tum.de>
- *    28.06.99   0.5   Add pci_set_master
- *    12.08.99   0.6   Fix MIDI UART crashing the driver
- *                     Changed mixer semantics from OSS documented
- *                     behaviour to OSS "code behaviour".
- *                     Recording might actually work now.
- *                     The real DDMA controller address register is at PCI config
- *                     0x60, while the register at 0x18 is used as a placeholder
- *                     register for BIOS address allocation. This register
- *                     is supposed to be copied into 0x60, according
- *                     to the Solo1 datasheet. When I do that, I can access
- *                     the DDMA registers except the mask bit, which
- *                     is stuck at 1. When I copy the contents of 0x18 +0x10
- *                     to the DDMA base register, everything seems to work.
- *                     The fun part is that the Windows Solo1 driver doesn't
- *                     seem to do these tricks.
- *                     Bugs remaining: plops and clicks when starting/stopping playback
- *    31.08.99   0.7   add spin_lock_init
- *                     replaced current->state = x with set_current_state(x)
- *    03.09.99   0.8   change read semantics for MIDI to match
- *                     OSS more closely; remove possible wakeup race
- *    07.10.99   0.9   Fix initialization; complain if sequencer writes time out
- *                     Revised resource grabbing for the FM synthesizer
- *    28.10.99   0.10  More waitqueue races fixed
- *    09.12.99   0.11  Work around stupid Alpha port issue (virt_to_bus(kmalloc(GFP_DMA)) > 16M)
- *                     Disabling recording on Alpha
+ *    10.11.1998   0.1   Initial release (without any hardware)
+ *    22.03.1999   0.2   cinfo.blocks should be reset after GETxPTR ioctl.
+ *                       reported by Johan Maes <joma@telindus.be>
+ *                       return EAGAIN instead of EBUSY when O_NONBLOCK
+ *                       read/write cannot be executed
+ *    07.04.1999   0.3   implemented the following ioctl's: SOUND_PCM_READ_RATE, 
+ *                       SOUND_PCM_READ_CHANNELS, SOUND_PCM_READ_BITS; 
+ *                       Alpha fixes reported by Peter Jones <pjones@redhat.com>
+ *    15.06.1999   0.4   Fix bad allocation bug.
+ *                       Thanks to Deti Fliegl <fliegl@in.tum.de>
+ *    28.06.1999   0.5   Add pci_set_master
+ *    12.08.1999   0.6   Fix MIDI UART crashing the driver
+ *                       Changed mixer semantics from OSS documented
+ *                       behaviour to OSS "code behaviour".
+ *                       Recording might actually work now.
+ *                       The real DDMA controller address register is at PCI config
+ *                       0x60, while the register at 0x18 is used as a placeholder
+ *                       register for BIOS address allocation. This register
+ *                       is supposed to be copied into 0x60, according
+ *                       to the Solo1 datasheet. When I do that, I can access
+ *                       the DDMA registers except the mask bit, which
+ *                       is stuck at 1. When I copy the contents of 0x18 +0x10
+ *                       to the DDMA base register, everything seems to work.
+ *                       The fun part is that the Windows Solo1 driver doesn't
+ *                       seem to do these tricks.
+ *                       Bugs remaining: plops and clicks when starting/stopping playback
+ *    31.08.1999   0.7   add spin_lock_init
+ *                       replaced current->state = x with set_current_state(x)
+ *    03.09.1999   0.8   change read semantics for MIDI to match
+ *                       OSS more closely; remove possible wakeup race
+ *    07.10.1999   0.9   Fix initialization; complain if sequencer writes time out
+ *                       Revised resource grabbing for the FM synthesizer
+ *    28.10.1999   0.10  More waitqueue races fixed
+ *    09.12.1999   0.11  Work around stupid Alpha port issue (virt_to_bus(kmalloc(GFP_DMA)) > 16M)
+ *                       Disabling recording on Alpha
+ *    12.01.2000   0.12  Prevent some ioctl's from returning bad count values on underrun/overrun;
+ *                       Tim Janik's BSE (Bedevilled Sound Engine) found this
+ *                       Integrated (aka redid 8-)) APM support patch by Zach Brown
  *
  */
 
@@ -79,6 +82,7 @@
 #include <linux/soundcard.h>
 #include <linux/pci.h>
 #include <linux/bitops.h>
+#include <linux/apm_bios.h>
 #include <asm/io.h>
 #include <asm/dma.h>
 #include <linux/init.h>
@@ -1224,7 +1228,7 @@ static int solo1_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
        unsigned long flags;
         audio_buf_info abinfo;
         count_info cinfo;
-       int val, mapped, ret;
+       int val, mapped, ret, count;
         int div1, div2;
         unsigned rate1, rate2;
 
@@ -1304,7 +1308,7 @@ static int solo1_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                        stop_dac(s);
                        s->dma_adc.ready = s->dma_dac.ready = 0;
                        /* program channels */
-                       s->channels = val ? 2 : 1;
+                       s->channels = (val >= 2) ? 2 : 1;
                        prog_codec(s);
                }
                return put_user(s->channels, (int *)arg);
@@ -1368,7 +1372,10 @@ static int solo1_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                spin_lock_irqsave(&s->lock, flags);
                solo1_update_ptr(s);
                abinfo.fragsize = s->dma_dac.fragsize;
-                abinfo.bytes = s->dma_dac.dmasize - s->dma_dac.count;
+               count = s->dma_dac.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = s->dma_dac.dmasize - count;
                 abinfo.fragstotal = s->dma_dac.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_dac.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -1397,9 +1404,11 @@ static int solo1_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                        return -EINVAL;
                spin_lock_irqsave(&s->lock, flags);
                solo1_update_ptr(s);
-                val = s->dma_dac.count;
+                count = s->dma_dac.count;
                spin_unlock_irqrestore(&s->lock, flags);
-               return put_user(val, (int *)arg);
+               if (count < 0)
+                       count = 0;
+               return put_user(count, (int *)arg);
 
         case SNDCTL_DSP_GETIPTR:
                if (!(file->f_mode & FMODE_READ))
@@ -1420,7 +1429,10 @@ static int solo1_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                spin_lock_irqsave(&s->lock, flags);
                solo1_update_ptr(s);
                 cinfo.bytes = s->dma_dac.total_bytes;
-                cinfo.blocks = s->dma_dac.count >> s->dma_dac.fragshift;
+               count = s->dma_dac.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_dac.fragshift;
                 cinfo.ptr = s->dma_dac.hwptr;
                if (s->dma_dac.mapped)
                        s->dma_dac.count &= s->dma_dac.fragsize-1;
@@ -2132,6 +2144,79 @@ static struct initvol {
        { SOUND_MIXER_WRITE_MIC, 0x4040 }
 };
 
+static int setup_solo1(struct solo1_state *s)
+{
+       struct pci_dev *pcidev = s->pcidev;
+       mm_segment_t fs;
+       int i, val;
+
+       /* initialize the chips */
+       if (!reset_ctrl(s)) {
+               printk(KERN_ERR "esssolo1: cannot reset controller\n");
+               return -1;
+       }
+       outb(0xb0, s->iobase+7); /* enable A1, A2, MPU irq's */
+       
+       /* initialize mixer regs */
+       write_mixer(s, 0x7f, 0); /* disable music digital recording */
+       write_mixer(s, 0x7d, 0x0c); /* enable mic preamp, MONO_OUT is 2nd DAC right channel */
+       write_mixer(s, 0x64, 0x45); /* volume control */
+       write_mixer(s, 0x48, 0x10); /* enable music DAC/ES6xx interface */
+       write_mixer(s, 0x50, 0);  /* disable spatializer */
+       write_mixer(s, 0x52, 0);
+       write_mixer(s, 0x14, 0);  /* DAC1 minimum volume */
+       write_mixer(s, 0x71, 0x20); /* enable new 0xA1 reg format */
+       outb(0, s->ddmabase+0xd); /* DMA master clear */
+       outb(1, s->ddmabase+0xf); /* mask channel */
+       /*outb(0, s->ddmabase+0x8);*/ /* enable controller (enable is low active!!) */
+
+       pci_set_master(pcidev);  /* enable bus mastering */
+       
+       fs = get_fs();
+       set_fs(KERNEL_DS);
+       val = SOUND_MASK_LINE;
+       mixer_ioctl(s, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
+       for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
+               val = initvol[i].vol;
+               mixer_ioctl(s, initvol[i].mixch, (unsigned long)&val);
+       }
+       val = 1; /* enable mic preamp */
+       mixer_ioctl(s, SOUND_MIXER_PRIVATE1, (unsigned long)&val);
+       set_fs(fs);
+       return 0;
+}
+
+#ifdef CONFIG_APM
+
+static int solo1_apm_callback(apm_event_t event)
+{
+       struct solo1_state *s;
+
+       switch(event) {
+       case APM_NORMAL_RESUME:
+       case APM_CRITICAL_RESUME:
+       case APM_STANDBY_RESUME:
+               for(s = devs ; s ; s = s->next)
+                       setup_solo1(s);
+               break;
+
+               default: 
+                       for(s = devs ; s ; s = s->next) {
+                               outb(0, s->iobase+6);
+                               /* DMA master clear */
+                               outb(0, s->ddmabase+0xd); 
+                               /* reset sequencer and FIFO */
+                               outb(3, s->sbbase+6); 
+                               /* turn off DDMA controller address space */
+                               pci_write_config_word(s->pcidev, 0x60, 0); 
+                       }
+       }
+       return 0;
+}
+
+#endif
+
+
 #define RSRCISIOREGION(dev,num) ((dev)->resource[(num)].start != 0 && \
                                 ((dev)->resource[(num)].flags & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO)
 #define RSRCADDRESS(dev,num) ((dev)->resource[(num)].start)
@@ -2141,12 +2226,11 @@ static int __init init_solo1(void)
 {
        struct solo1_state *s;
        struct pci_dev *pcidev = NULL;
-       mm_segment_t fs;
-       int i, val, index = 0;
+       int index = 0;
 
        if (!pci_present())   /* No PCI bus in this machine! */
                return -ENODEV;
-       printk(KERN_INFO "solo1: version v0.11 time " __TIME__ " " __DATE__ "\n");
+       printk(KERN_INFO "solo1: version v0.12 time " __TIME__ " " __DATE__ "\n");
        while (index < NR_DEVICE && 
               (pcidev = pci_find_device(PCI_VENDOR_ID_ESS, PCI_DEVICE_ID_ESS_SOLO1, pcidev))) {
                if (!RSRCISIOREGION(pcidev, 0) ||
@@ -2192,13 +2276,7 @@ static int __init init_solo1(void)
                        printk(KERN_ERR "solo1: irq %u in use\n", s->irq);
                        goto err_irq;
                }
-               /* initialize DDMA base address */
                printk(KERN_DEBUG "solo1: ddma base address: 0x%lx\n", s->ddmabase);
-               pci_write_config_word(pcidev, 0x60, (s->ddmabase & (~0xf)) | 1);
-               /* set DMA policy to DDMA, IRQ emulation off (CLKRUN disabled for now) */
-               pci_write_config_dword(pcidev, 0x50, 0);
-               /* disable legacy audio address decode */
-               pci_write_config_word(pcidev, 0x40, 0x907f);
 
                printk(KERN_INFO "solo1: joystick port at %#lx\n", s->gpbase+1);
 
@@ -2211,39 +2289,8 @@ static int __init init_solo1(void)
                        goto err_dev3;
                if ((s->dev_dmfm = register_sound_special(&solo1_dmfm_fops, 15 /* ?? */)) < 0)
                        goto err_dev4;
-               /* initialize the chips */
-               if (!reset_ctrl(s)) {
-                       printk(KERN_ERR "esssolo1: cannot reset controller\n");
+               if (setup_solo1(s))
                        goto err;
-               }
-               outb(0xb0, s->iobase+7); /* enable A1, A2, MPU irq's */
-
-               /* initialize mixer regs */
-               write_mixer(s, 0x7f, 0); /* disable music digital recording */
-               write_mixer(s, 0x7d, 0x0c); /* enable mic preamp, MONO_OUT is 2nd DAC right channel */
-               write_mixer(s, 0x64, 0x45); /* volume control */
-               write_mixer(s, 0x48, 0x10); /* enable music DAC/ES6xx interface */
-               write_mixer(s, 0x50, 0);  /* disable spatializer */
-               write_mixer(s, 0x52, 0);
-               write_mixer(s, 0x14, 0);  /* DAC1 minimum volume */
-               write_mixer(s, 0x71, 0x20); /* enable new 0xA1 reg format */
-               outb(0, s->ddmabase+0xd); /* DMA master clear */
-               outb(1, s->ddmabase+0xf); /* mask channel */
-               /*outb(0, s->ddmabase+0x8);*/ /* enable controller (enable is low active!!) */
-
-               pci_set_master(pcidev);  /* enable bus mastering */
-               
-               fs = get_fs();
-               set_fs(KERNEL_DS);
-               val = SOUND_MASK_LINE;
-               mixer_ioctl(s, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
-               for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
-                       val = initvol[i].vol;
-                       mixer_ioctl(s, initvol[i].mixch, (unsigned long)&val);
-               }
-               val = 1; /* enable mic preamp */
-               mixer_ioctl(s, SOUND_MIXER_PRIVATE1, (unsigned long)&val);
-               set_fs(fs);
                /* queue it for later freeing */
                s->next = devs;
                devs = s;
@@ -2259,7 +2306,7 @@ static int __init init_solo1(void)
        err_dev2:
                unregister_sound_dsp(s->dev_audio);
        err_dev1:
-               printk(KERN_ERR "solo1: cannot register misc device\n");
+               printk(KERN_ERR "solo1: initialisation error\n");
                free_irq(s->irq, s);
        err_irq:
                release_region(s->iobase, IOBASE_EXTENT);
@@ -2271,6 +2318,9 @@ static int __init init_solo1(void)
        }
        if (!devs)
                return -ENODEV;
+#ifdef CONFIG_APM
+       apm_register_callback(solo1_apm_callback);
+#endif
        return 0;
 }
 
@@ -2302,6 +2352,9 @@ static void __exit cleanup_solo1(void)
                unregister_sound_special(s->dev_dmfm);
                kfree_s(s, sizeof(struct solo1_state));
        }
+#ifdef CONFIG_APM
+       apm_unregister_callback(solo1_apm_callback);
+#endif
        printk(KERN_INFO "solo1: unloading\n");
 }
 
index f52ec2247ec86ccc471e671ab7a5c21feccd0365..245d16a19eb501e2b4fbce1e26fcf51c6b77fe42 100644 (file)
@@ -84,6 +84,9 @@
  *    28.10.1999   0.22  More waitqueue races fixed
  *    01.12.1999   0.23  New argument to allocate_resource
  *    07.12.1999   0.24  More allocate_resource semantics change
+ *    08.01.2000   0.25  Prevent some ioctl's from returning bad count values on underrun/overrun;
+ *                       Tim Janik's BSE (Bedevilled Sound Engine) found this
+ *                       use Martin Mares' pci_assign_resource
  *
  */
 
 #define SV_EXTENT_GAME    0x8
 #define SV_EXTENT_DMA     0x10
 
+/*
+ * we are not a bridge and thus use a resource for DDMA that is used for bridges but
+ * left empty for normal devices
+ */
 #define RESOURCE_SB       0
 #define RESOURCE_ENH      1
 #define RESOURCE_SYNTH    2
@@ -1533,6 +1540,7 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
        unsigned long flags;
         audio_buf_info abinfo;
         count_info cinfo;
+       int count;
        int val, mapped, ret;
        unsigned char fmtm, fmtd;
 
@@ -1700,7 +1708,10 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
                spin_lock_irqsave(&s->lock, flags);
                sv_update_ptr(s);
                abinfo.fragsize = s->dma_dac.fragsize;
-                abinfo.bytes = s->dma_dac.dmasize - s->dma_dac.count;
+               count = s->dma_dac.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = s->dma_dac.dmasize - count;
                 abinfo.fragstotal = s->dma_dac.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_dac.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -1714,7 +1725,10 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
                spin_lock_irqsave(&s->lock, flags);
                sv_update_ptr(s);
                abinfo.fragsize = s->dma_adc.fragsize;
-                abinfo.bytes = s->dma_adc.count;
+               count = s->dma_adc.count;
+               if (count < 0)
+                       count = 0;
+                abinfo.bytes = count;
                 abinfo.fragstotal = s->dma_adc.numfrag;
                 abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;      
                spin_unlock_irqrestore(&s->lock, flags);
@@ -1729,9 +1743,11 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
                        return -EINVAL;
                spin_lock_irqsave(&s->lock, flags);
                sv_update_ptr(s);
-                val = s->dma_dac.count;
+                count = s->dma_dac.count;
                spin_unlock_irqrestore(&s->lock, flags);
-               return put_user(val, (int *)arg);
+               if (count < 0)
+                       count = 0;
+               return put_user(count, (int *)arg);
 
         case SNDCTL_DSP_GETIPTR:
                if (!(file->f_mode & FMODE_READ))
@@ -1739,7 +1755,10 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
                spin_lock_irqsave(&s->lock, flags);
                sv_update_ptr(s);
                 cinfo.bytes = s->dma_adc.total_bytes;
-                cinfo.blocks = s->dma_adc.count >> s->dma_adc.fragshift;
+               count = s->dma_adc.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_adc.fragshift;
                 cinfo.ptr = s->dma_adc.hwptr;
                if (s->dma_adc.mapped)
                        s->dma_adc.count &= s->dma_adc.fragsize-1;
@@ -1752,7 +1771,10 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
                spin_lock_irqsave(&s->lock, flags);
                sv_update_ptr(s);
                 cinfo.bytes = s->dma_dac.total_bytes;
-                cinfo.blocks = s->dma_dac.count >> s->dma_dac.fragshift;
+               count = s->dma_dac.count;
+               if (count < 0)
+                       count = 0;
+                cinfo.blocks = count >> s->dma_dac.fragshift;
                 cinfo.ptr = s->dma_dac.hwptr;
                if (s->dma_dac.mapped)
                        s->dma_dac.count &= s->dma_dac.fragsize-1;
@@ -2427,7 +2449,7 @@ static int __init init_sonicvibes(void)
 
        if (!pci_present())   /* No PCI bus in this machine! */
                return -ENODEV;
-       printk(KERN_INFO "sv: version v0.24 time " __TIME__ " " __DATE__ "\n");
+       printk(KERN_INFO "sv: version v0.25 time " __TIME__ " " __DATE__ "\n");
 #if 0
        if (!(wavetable_mem = __get_free_pages(GFP_KERNEL, 20-PAGE_SHIFT)))
                printk(KERN_INFO "sv: cannot allocate 1MB of contiguous nonpageable memory for wavetable data\n");
@@ -2444,20 +2466,20 @@ static int __init init_sonicvibes(void)
                        continue;
                /* try to allocate a DDMA resource if not already available */
                if (!RSRCISIOREGION(pcidev, RESOURCE_DDMA)) {
-                       /* take care of ISA aliases */
+                       pcidev->resource[RESOURCE_DDMA].start = 0;
+                       pcidev->resource[RESOURCE_DDMA].end = 2*SV_EXTENT_DMA-1;
+                       pcidev->resource[RESOURCE_DDMA].flags = PCI_BASE_ADDRESS_SPACE_IO | IORESOURCE_IO;
                        ddmanamelen = strlen(sv_ddma_name)+1;
                        if (!(ddmaname = kmalloc(ddmanamelen, GFP_KERNEL)))
                                continue;
                        memcpy(ddmaname, sv_ddma_name, ddmanamelen);
                        pcidev->resource[RESOURCE_DDMA].name = ddmaname;
-                       if (allocate_resource(&ioport_resource, pcidev->resource+RESOURCE_DDMA, 
-                                             2*SV_EXTENT_DMA, 0x1000, 0x10000-2*SV_EXTENT_DMA, 1024, NULL, NULL)) {
+                       if (pci_assign_resource(pcidev, RESOURCE_DDMA)) {
                                pcidev->resource[RESOURCE_DDMA].name = NULL;
                                kfree(ddmaname);
                                printk(KERN_ERR "sv: cannot allocate DDMA controller io ports\n");
                                continue;
                        }
-                       pcidev->resource[RESOURCE_DDMA].flags = PCI_BASE_ADDRESS_SPACE_IO | IORESOURCE_IO;
                }
                if (!(s = kmalloc(sizeof(struct sv_state), GFP_KERNEL))) {
                        printk(KERN_WARNING "sv: out of memory\n");
index 9f759baf83d35e12aca290796dc38819089a60af..154d5cd221ba4bc70d0bf967d1eed2a0264e7d55 100644 (file)
@@ -1,10 +1,10 @@
 /*
- * acm.c  Version 0.13
+ * acm.c  Version 0.14
  *
  * Copyright (c) 1999 Armin Fuerst     <fuerst@in.tum.de>
  * Copyright (c) 1999 Pavel Machek     <pavel@suse.cz>
  * Copyright (c) 1999 Johannes Erdfelt <jerdfelt@valinux.com>
- * Copyright (c) 1999 Vojtech Pavlik   <vojtech@suse.cz>
+ * Copyright (c) 2000 Vojtech Pavlik   <vojtech@suse.cz>
  *
  * USB Abstract Control Model driver for USB modems and ISDN adapters
  *
@@ -16,6 +16,7 @@
  *     v0.11 - fixed flow control, read error doesn't stop reads
  *     v0.12 - added TIOCM ioctls, added break handling, made struct acm kmalloced
  *     v0.13 - added termios, added hangup
+ *     v0.14 - sized down struct acm
  */
 
 /*
@@ -129,21 +130,20 @@ struct acm {
        struct usb_device *dev;                         /* the coresponding usb device */
        struct usb_interface *iface;                    /* the interfaces - +0 control +1 data */
        struct tty_struct *tty;                         /* the coresponding tty */
+       struct urb ctrlurb, readurb, writeurb;          /* urbs */
+       struct acm_line line;                           /* line coding (bits, stop, parity) */
        unsigned int ctrlin;                            /* input control lines (DCD, DSR, RI, break, overruns) */
        unsigned int ctrlout;                           /* output control lines (DTR, RTS) */
-       struct acm_line line;                           /* line coding (bits, stop, parity) */
        unsigned int writesize;                         /* max packet size for the output bulk endpoint */
-       struct urb ctrlurb, readurb, writeurb;          /* urbs */
-       unsigned int minor;                             /* acm minor number */
-       unsigned int present;                           /* this device is connected to the usb bus */
        unsigned int used;                              /* someone has this acm's device open */
-       unsigned int clocal;                            /* termios CLOCAL */
+       unsigned int minor;                             /* acm minor number */
+       unsigned char clocal;                           /* termios CLOCAL */
 };
 
 static struct usb_driver acm_driver;
 static struct acm *acm_table[ACM_TTY_MINORS] = { NULL, /* .... */ };
 
-#define ACM_READY(acm) (acm && acm->present && acm->used)
+#define ACM_READY(acm) (acm && acm->dev && acm->used)
 
 /*
  * Functions for ACM control messages.
@@ -265,7 +265,7 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 {
        struct acm *acm = acm_table[MINOR(tty->device)];
 
-       if (!acm || !acm->present) return -EINVAL;
+       if (!acm || !acm->dev) return -EINVAL;
 
        tty->driver_data = acm;
        acm->tty = tty;
@@ -295,7 +295,7 @@ static void acm_tty_close(struct tty_struct *tty, struct file *filp)
 
        if (--acm->used) return;
        
-       if (acm->present) {
+       if (acm->dev) {
                acm_set_control(acm, acm->ctrlout = 0);
                usb_unlink_urb(&acm->ctrlurb);
                usb_unlink_urb(&acm->writeurb);
@@ -519,7 +519,6 @@ static void *acm_probe(struct usb_device *dev, unsigned int ifnum)
                acm->writesize = epwrite->wMaxPacketSize;
                acm->iface = cfacm->interface;
                acm->minor = minor;
-               acm->present = 1;
                acm->dev = dev;
 
                if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) {
@@ -558,12 +557,12 @@ static void acm_disconnect(struct usb_device *dev, void *ptr)
 {
        struct acm *acm = ptr;
 
-       if (!acm || !acm->present) {
+       if (!acm || !acm->dev) {
                dbg("disconnect on nonexisting interface");
                return;
        }
 
-       acm->present = 0;
+       acm->dev = NULL;
 
        usb_unlink_urb(&acm->ctrlurb);
        usb_unlink_urb(&acm->readurb);
index a31c2910f660523ea1287daa5067c1c9b11177ac..52fc94adb13d93144fdcc47b3c056caccf94c4c1 100644 (file)
@@ -1,8 +1,8 @@
 /*
  *  driver/usb/hid-debug.h
  *
- *  (c) 1999 Andreas Gal <gal@cs.uni-magdeburg.de>
- *  (c) 1999 Vojtech Pavlik <vojtech@suse.cz>
+ *  (c) 1999 Andreas Gal       <gal@cs.uni-magdeburg.de>
+ *  (c) 2000 Vojtech Pavlik    <vojtech@suse.cz>
  *
  *  Some debug stuff for the HID parser.
  *
index 076a0efb7ce528063089bd192357bd283d7bb838..5cb01c9fc79f24506cc3d5d8e74b519872f6c9cf 100644 (file)
@@ -2,7 +2,7 @@
  *  hid.c  Version 0.8
  *
  *  Copyright (c) 1999 Andreas Gal
- *  Copyright (c) 1999 Vojtech Pavlik
+ *  Copyright (c) 2000 Vojtech Pavlik
  *
  *  USB HID support for the Linux input drivers
  *
@@ -1074,7 +1074,7 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
 static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum)
 {
        struct usb_interface_descriptor *interface = &dev->actconfig->interface[ifnum].altsetting[0];
-       struct usb_hid_descriptor *hdesc;
+       struct hid_descriptor *hdesc;
        struct hid_device *hid;
        unsigned rsize = 0;
        int n;
index 8ccdb67bd0dd28ba1a5a1a1b95f9021f353a38f6..db3e92364a63e57ef1b000cdaf0e0a286803489d 100644 (file)
@@ -4,8 +4,8 @@
 /*
  *  drivers/usb/hid.h  Version 0.8
  *
- *  Copyright (c) 1999 Vojtech Pavlik
  *  Copyright (c) 1999 Andreas Gal
+ *  Copyright (c) 2000 Vojtech Pavlik
  *
  *  Sponsored by SuSE
  */
 #include <linux/malloc.h>
 #include <linux/list.h>
 
-/*
- * Enable/Disable debug information.
- */
-
-#ifdef CONFIG_USB_HID_DEBUG
-#define hid_debug(fmt,arg...) printk(KERN_DEBUG "hid: " fmt "\n" , ##arg)
-#else
-#define hid_debug(fmt,arg...) do { } while (0)
-#endif
-
 /*
  * USB HID (Human Interface Device) interface class code
  */
 
 #define USB_INTERFACE_CLASS_HID                3
 
-/*
- * USB interface subclass codes. 
- */
-
-#define USB_INTERFACE_SUBCLASS_NONE    0 
-#define USB_INTERFACE_SUBCLASS_HID_BP  1
-
-/*
- * HID protocol codes (only for boot protocol)
- */
-
-#define HID_PROTOCOL_NONE      0
-#define HID_PROTOCOL_KBD       1
-#define HID_PROTOCOL_MOUSE     2
-
 /*
  * We parse each description item into this structure. Short items data
  * values are expanded to 32-bit signed int, long items contain a pointer
@@ -122,7 +97,6 @@ struct hid_item {
 
 /*
  * HID report descriptor main item contents
- * Warning: VOLATILE is not available for TAG_INPUT
  */
 
 #define HID_MAIN_ITEM_CONSTANT         0x001
@@ -195,18 +169,6 @@ struct hid_item {
 #define HID_GD_GAMEPAD         0x00010005
 #define HID_GD_HATSWITCH       0x00010039
 
-/*
- * HID interface requests (this belongs here, the USB_REQ_xxx stuff should
- * disapear).
- */
-
-#define HID_REQ_GET_REPORT   0x01
-#define HID_REQ_GET_IDLE     0x02
-#define HID_REQ_GET_PROTOCOL 0x03
-#define HID_REQ_SET_REPORT   0x09
-#define HID_REQ_SET_IDLE     0x0A
-#define HID_REQ_SET_PROTOCOL 0x0B
-
 /*
  * HID report types --- Ouch! HID spec says 1 2 3!
  */
@@ -215,13 +177,6 @@ struct hid_item {
 #define HID_OUTPUT_REPORT      1
 #define HID_FEATURE_REPORT     2
 
-/*
- * HID protocols
- */
-
-#define HID_PROTOCOL_BOOT      0
-#define HID_PROTOCOL_REPORT    1
-
 /*
  * This is the global enviroment of the parser. This information is
  * persistent for main-items. The global enviroment can be saved and
@@ -341,5 +296,21 @@ struct hid_parser {
        struct hid_device    *device;
 };
 
+struct hid_class_descriptor {
+       __u8  bDescriptorType;
+       __u16 wDescriptorLength;
+} __attribute__ ((packed));
+
+struct hid_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u16 bcdHID;
+       __u8  bCountryCode;
+       __u8  bNumDescriptors;
+
+       struct hid_class_descriptor desc[1];
+} __attribute__ ((packed));
+
+
 #endif
 
index c95a07d74ed19471d8f134979d2ad7126f5939c1..0da7eb87c653c29d02ce4d3489917503776d2c8d 100644 (file)
@@ -3,6 +3,13 @@
 
 #include <linux/list.h>
 
+/*
+ * Hub request types
+ */
+
+#define USB_RT_HUB     (USB_TYPE_CLASS | USB_RECIP_DEVICE)
+#define USB_RT_PORT    (USB_TYPE_CLASS | USB_RECIP_OTHER)
+
 /*
  * Hub Class feature numbers
  */
index d4647844541fea3c23e9512e7d24b0d099ea21db..c26f96132675fabf2ef51715b63f81927849bbca 100644 (file)
  *    DEBUG - Debugging code.
  *    FIXME - Something that is broken or needs improvement.
  *
- * Version History:
- *    Version 1.00 - Initial version
+ * Version: 1.05
+ *
+ * Please see the file: linux/Documentation/usb/ov511.txt 
+ * and the website at:  http://people.delphi.com/mmcclelland/linux/ 
+ * for more info.
  */
 
 /*
@@ -63,6 +66,8 @@
 
 #define OV511_I2C_RETRIES 3
 
+#define OV7610_AUTO_ADJUST 1
+
 /* Video Size 640 x 480 x 3 bytes for RGB */
 #define MAX_FRAME_SIZE (640 * 480 * 3)
 
@@ -201,7 +206,7 @@ int ov511_reg_write(struct usb_device *dev, unsigned char reg, unsigned char val
                0, (__u16)reg, &value, 1, HZ);  
                        
 #if 0
-       PDEBUG("reg write: 0x%02X:0x%02X\n", reg, value);
+       PDEBUG("reg write: 0x%02X:0x%02X", reg, value);
 #endif
                        
        return rc;
@@ -220,7 +225,7 @@ int ov511_reg_read(struct usb_device *dev, unsigned char reg)
                0, (__u16)reg, buffer, 1, HZ);
                                
 #if 0
-       PDEBUG("reg read: 0x%02X:0x%02X\n", reg, buffer[0]);
+       PDEBUG("reg read: 0x%02X:0x%02X", reg, buffer[0]);
 #endif
        
        if(rc < 0)
@@ -234,7 +239,7 @@ int ov511_i2c_write(struct usb_device *dev, unsigned char reg, unsigned char val
        int rc, retries;
 
 #if 0
-       PDEBUG("i2c write: 0x%02X:0x%02X\n", reg, value);
+       PDEBUG("i2c write: 0x%02X:0x%02X", reg, value);
 #endif
        /* Three byte write cycle */
        for(retries = OV511_I2C_RETRIES;;) {
@@ -316,7 +321,7 @@ int ov511_i2c_read(struct usb_device *dev, unsigned char reg)
 
        value = ov511_reg_read(dev, OV511_REG_I2C_DATA_PORT);
 #if 0
-       PDEBUG("i2c read: 0x%02X:0x%02X\n", reg, value);
+       PDEBUG("i2c read: 0x%02X:0x%02X", reg, value);
 #endif
                
        /* This is needed to make ov511_i2c_write() work */
@@ -334,14 +339,14 @@ static void ov511_dump_i2c_range( struct usb_device *dev, int reg1, int regn)
        for(i=reg1; i<=regn; i++) {
          rc = ov511_i2c_read(dev, i);
 #if 0
-         PDEBUG("OV7610[0x%X] = 0x%X\n", i, rc);
+         PDEBUG("OV7610[0x%X] = 0x%X", i, rc);
 #endif
        }
 }
 
 static void ov511_dump_i2c_regs( struct usb_device *dev)
 {
-       PDEBUG("I2C REGS\n");
+       PDEBUG("I2C REGS");
        ov511_dump_i2c_range(dev, 0x00, 0x38);
 }
 
@@ -351,27 +356,27 @@ static void ov511_dump_reg_range( struct usb_device *dev, int reg1, int regn)
        int rc;
        for(i=reg1; i<=regn; i++) {
          rc = ov511_reg_read(dev, i);
-         PDEBUG("OV511[0x%X] = 0x%X\n", i, rc);
+         PDEBUG("OV511[0x%X] = 0x%X", i, rc);
        }
 }
 
 static void ov511_dump_regs( struct usb_device *dev)
 {
-       PDEBUG("CAMERA INTERFACE REGS\n");
+       PDEBUG("CAMERA INTERFACE REGS");
        ov511_dump_reg_range(dev, 0x10, 0x1f);
-       PDEBUG("DRAM INTERFACE REGS\n");
+       PDEBUG("DRAM INTERFACE REGS");
        ov511_dump_reg_range(dev, 0x20, 0x23);
-       PDEBUG("ISO FIFO REGS\n");
+       PDEBUG("ISO FIFO REGS");
        ov511_dump_reg_range(dev, 0x30, 0x31);
-       PDEBUG("PIO REGS\n");
+       PDEBUG("PIO REGS");
        ov511_dump_reg_range(dev, 0x38, 0x39);
        ov511_dump_reg_range(dev, 0x3e, 0x3e);
-       PDEBUG("I2C REGS\n");
+       PDEBUG("I2C REGS");
        ov511_dump_reg_range(dev, 0x40, 0x49);
-       PDEBUG("SYSTEM CONTROL REGS\n");
+       PDEBUG("SYSTEM CONTROL REGS");
        ov511_dump_reg_range(dev, 0x50, 0x53);
        ov511_dump_reg_range(dev, 0x5e, 0x5f);
-       PDEBUG("OmniCE REGS\n");
+       PDEBUG("OmniCE REGS");
        ov511_dump_reg_range(dev, 0x70, 0x79);
        ov511_dump_reg_range(dev, 0x80, 0x9f);
        ov511_dump_reg_range(dev, 0xa0, 0xbf);
@@ -383,10 +388,10 @@ int ov511_i2c_reset(struct usb_device *dev)
 {
        int rc;
 
-       PDEBUG("Reset 7610\n");
+       PDEBUG("Reset 7610");
        rc = ov511_i2c_write(dev, 0x12, 0x80);
        if (rc < 0)
-               printk(KERN_ERR "ov511: i2c reset: command failed\n");
+               err("i2c reset: command failed");
 
        return rc;
 }
@@ -395,24 +400,24 @@ int ov511_reset(struct usb_device *dev, unsigned char reset_type)
 {
        int rc;
        
-       PDEBUG("Reset: type=0x%X\n", reset_type);
+       PDEBUG("Reset: type=0x%X", reset_type);
        rc = ov511_reg_write(dev, OV511_REG_SYSTEM_RESET, reset_type);
        if (rc < 0)
-               printk(KERN_ERR "ov511: reset: command failed\n");
+               err("reset: command failed");
 
        rc = ov511_reg_write(dev, OV511_REG_SYSTEM_RESET, 0);
        if (rc < 0)
-               printk(KERN_ERR "ov511: reset: command failed\n");
+               err("reset: command failed");
 
        return rc;
 }
 
 int ov511_set_packet_size(struct usb_ov511 *ov511, int size)
 {
-       int alt, multiplier, err;
+       int alt, multiplier, rc;
                
 #if 0
-       PDEBUG("set packet size: %d\n", size);
+       PDEBUG("set packet size: %d", size);
 #endif
        
        switch (size) {
@@ -449,21 +454,19 @@ int ov511_set_packet_size(struct usb_ov511 *ov511, int size)
                        multiplier = 1; // FIXME - is this correct?
                        break;
                default:
-                       printk(KERN_ERR "ov511_set_packet_size: invalid size (%d)\n",
-                              size);
+                       err("Set packet size: invalid size (%d)", size);
                        return -EINVAL;
        }
 
-       err = ov511_reg_write(ov511->dev, OV511_REG_FIFO_PACKET_SIZE,
-                                 multiplier);
-       if (err < 0) {
-               printk(KERN_ERR "ov511: Set packet size: Set FIFO size ret %d\n",
-                      err);
+       rc = ov511_reg_write(ov511->dev, OV511_REG_FIFO_PACKET_SIZE,
+                            multiplier);
+       if (rc < 0) {
+               err("Set packet size: Set FIFO size ret %d", rc);
                return -ENOMEM;
        }
        
        if (usb_set_interface(ov511->dev, ov511->iface, alt) < 0) {
-               printk(KERN_ERR "ov511: Set packet size: set interface error\n");
+               err("Set packet size: set interface error");
                return -EBUSY;
        }
 
@@ -474,6 +477,43 @@ int ov511_set_packet_size(struct usb_ov511 *ov511, int size)
        return 0;
 }
 
+static inline int ov7610_set_picture(struct usb_ov511 *ov511,
+                                     struct video_picture *p)
+{
+       if(ov511_i2c_write(ov511->dev, OV7610_REG_SAT, p->colour >> 8) < 0)
+               return -EIO;
+
+       if(ov511_i2c_write(ov511->dev, OV7610_REG_CNT, p->contrast >> 8) < 0)
+               return -EIO;
+
+       if(ov511_i2c_write(ov511->dev, OV7610_REG_BRT, p->brightness >> 8) < 0)
+               return -EIO;
+
+       return 0;
+}
+
+static inline int ov7610_get_picture(struct usb_ov511 *ov511,
+                                     struct video_picture *p)
+{
+       int ret;
+
+       if((ret = ov511_i2c_read(ov511->dev, OV7610_REG_SAT)) < 0) return -EIO;
+       p->colour = ret << 8;
+
+       if((ret = ov511_i2c_read(ov511->dev, OV7610_REG_CNT)) < 0) return -EIO;
+       p->contrast = ret << 8;
+
+       if((ret = ov511_i2c_read(ov511->dev, OV7610_REG_BRT)) < 0) return -EIO;
+       p->brightness = ret << 8;
+
+       p->hue = 0x8000;
+       p->whiteness = 105 << 8;
+       p->depth = 24;
+       p->palette = VIDEO_PALETTE_RGB24;
+
+       return 0;
+}
+
 static int ov511_mode_init_regs(struct usb_ov511 *ov511,
                                int width, int height, int mode)
 {
@@ -481,8 +521,7 @@ static int ov511_mode_init_regs(struct usb_ov511 *ov511,
        struct usb_device *dev = ov511->dev;
 
 #if 0
-       PDEBUG("ov511_mode_init_regs(ov511, %d, %d, %d)\n",
-              width, height, mode);
+       PDEBUG("ov511_mode_init_regs(ov511, %d, %d, %d)", width, height, mode);
 #endif
        ov511_set_packet_size(ov511, 0);
 
@@ -524,8 +563,7 @@ static int ov511_mode_init_regs(struct usb_ov511 *ov511,
                ov511_i2c_write(dev, 0x14, 0x24);
                ov511_i2c_write(dev, 0x35, 0x1e);
        } else {
-               PDEBUG("ov511: Unknown mode (%d, %d): %d\n",
-                      width, height, mode);
+               err("Unknown mode (%d, %d): %d", width, height, mode);
                rc = -EINVAL;
        }
        ov511_set_packet_size(ov511, 993);
@@ -713,11 +751,8 @@ static int ov511_move_data(struct usb_ov511 *ov511, urb_t *urb)
 
                aPackNum[i] = n ? cdata[992] : -1;
 
-               if (st){ 
-                       // Macro - must be in braces!
-                       PDEBUG("data error: [%d] len=%d, status=%d\n",
-                               i, n, st);
-               }
+               if (st)
+                       PDEBUG("data error: [%d] len=%d, status=%d", i, n, st);
 
                frame = &ov511->frame[ov511->curframe];
                
@@ -727,14 +762,14 @@ static int ov511_move_data(struct usb_ov511 *ov511, urb_t *urb)
                    (cdata[8] & 8) && (cdata[8] & 0x80)) {
 
 #if 0
-                   PDEBUG("Found Frame End!, packnum = %d\n", (int)(cdata[992]));
-                   PDEBUG("Current frame = %d\n", ov511->curframe);
+                   PDEBUG("Found Frame End!, packnum = %d", (int)(cdata[992]));
+                   PDEBUG("Current frame = %d", ov511->curframe);
 #endif
 
                    if (frame->scanstate == STATE_LINES) {
                        if (waitqueue_active(&frame->wq)) {
 #if 0
-                         PDEBUG("About to wake up waiting processes\n");
+                         PDEBUG("About to wake up waiting processes");
 #endif
                          frame->grabstate = FRAME_DONE;
                          ov511->curframe = -1;
@@ -748,8 +783,8 @@ static int ov511_move_data(struct usb_ov511 *ov511, urb_t *urb)
                          cdata[4] | cdata[5] | cdata[6] | cdata[7]) == 0 &&
                         (cdata[8] & 8)) {
 #if 0
-                       PDEBUG("ov511: Found Frame Start!, packnum = %d\n", (int)(cdata[992]));
-                       PDEBUG("ov511: Frame Header Byte = 0x%x\n", (int)(cdata[8]));
+                       PDEBUG("ov511: Found Frame Start!, packnum = %d", (int)(cdata[992]));
+                       PDEBUG("ov511: Frame Header Byte = 0x%x", (int)(cdata[8]));
 #endif
                    frame->scanstate = STATE_LINES;
                        frame->segment = 0;
@@ -843,7 +878,7 @@ static int ov511_init_isoc(struct usb_ov511 *ov511)
        urb = usb_alloc_urb(FRAMES_PER_DESC);
        
        if (!urb) {
-               printk(KERN_ERR "ov511_init_isoc: usb_alloc_urb ret. NULL\n");
+               err("ov511_init_isoc: usb_alloc_urb ret. NULL");
                return -ENOMEM;
        }
        ov511->sbuf[0].urb = urb;
@@ -862,7 +897,7 @@ static int ov511_init_isoc(struct usb_ov511 *ov511)
 
        urb = usb_alloc_urb(FRAMES_PER_DESC);
        if (!urb) {
-               printk(KERN_ERR "ov511_init_isoc: usb_alloc_urb ret. NULL\n");
+               err("ov511_init_isoc: usb_alloc_urb ret. NULL");
                return -ENOMEM;
        }
        ov511->sbuf[1].urb = urb;
@@ -884,12 +919,10 @@ static int ov511_init_isoc(struct usb_ov511 *ov511)
 
        err = usb_submit_urb(ov511->sbuf[0].urb);
        if (err)
-               printk(KERN_ERR "ov511_init_isoc: usb_run_isoc(0) ret %d\n",
-                       err);
+               err("ov511_init_isoc: usb_run_isoc(0) ret %d", err);
        err = usb_submit_urb(ov511->sbuf[1].urb);
        if (err)
-               printk(KERN_ERR "ov511_init_isoc: usb_run_isoc(1) ret %d\n",
-                       err);
+               err("ov511_init_isoc: usb_run_isoc(1) ret %d\n", err);
 
        ov511->streaming = 1;
 
@@ -961,7 +994,7 @@ static int ov511_open(struct video_device *dev, int flags)
        int err = -EBUSY;
        struct usb_ov511 *ov511 = (struct usb_ov511 *)dev;
 
-       PDEBUG("ov511_open\n");
+       PDEBUG("ov511_open");
        
        down(&ov511->lock);
        if (ov511->user)
@@ -980,8 +1013,8 @@ static int ov511_open(struct video_device *dev, int flags)
        ov511->frame[0].data = ov511->fbuf;
        ov511->frame[1].data = ov511->fbuf + MAX_FRAME_SIZE;
 
-       PDEBUG("frame [0] @ %p\n", ov511->frame[0].data);
-       PDEBUG("frame [1] @ %p\n", ov511->frame[1].data);
+       PDEBUG("frame [0] @ %p", ov511->frame[0].data);
+       PDEBUG("frame [1] @ %p", ov511->frame[1].data);
 
        ov511->sbuf[0].data = kmalloc(FRAMES_PER_DESC * FRAME_SIZE_PER_DESC, GFP_KERNEL);
        if (!ov511->sbuf[0].data)
@@ -990,8 +1023,8 @@ static int ov511_open(struct video_device *dev, int flags)
        if (!ov511->sbuf[1].data)
                goto open_err_on1;
                
-       PDEBUG("sbuf[0] @ %p\n", ov511->sbuf[0].data);
-       PDEBUG("sbuf[1] @ %p\n", ov511->sbuf[1].data);
+       PDEBUG("sbuf[0] @ %p", ov511->sbuf[0].data);
+       PDEBUG("sbuf[1] @ %p", ov511->sbuf[1].data);
 
        err = ov511_init_isoc(ov511);
        if (err)
@@ -1022,7 +1055,7 @@ static void ov511_close(struct video_device *dev)
 {
        struct usb_ov511 *ov511 = (struct usb_ov511 *)dev;
 
-       PDEBUG("ov511_close\n");
+       PDEBUG("ov511_close");
        
        down(&ov511->lock);     
        ov511->user--;
@@ -1050,11 +1083,11 @@ static long ov511_write(struct video_device *dev, const char *buf, unsigned long
 }
 
 // FIXME - Needs much work!!!
-static int ov511_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
+static int ov511_ioctl(struct video_device *vdev, unsigned int cmd, void *arg)
 {
-       struct usb_ov511 *ov511 = (struct usb_ov511 *)dev;
+       struct usb_ov511 *ov511 = (struct usb_ov511 *)vdev;
 #if 0  
-       PDEBUG("IOCtl: 0x%X\n", cmd);
+       PDEBUG("IOCtl: 0x%X", cmd);
 #endif 
        switch (cmd) {
                case VIDIOCGCAP:
@@ -1111,14 +1144,9 @@ static int ov511_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                {
                        struct video_picture p;
 
-                       p.colour = 0x8000;
-                       p.hue = 0x8000;
-                       p.brightness = 180 << 8;        /* XXX */
-                       p.contrast = 192 << 8;          /* XXX */
-                       p.whiteness = 105 << 8;         /* XXX */
-                       p.depth = 24;
-                       p.palette = VIDEO_PALETTE_RGB24;
-
+                       if (ov7610_get_picture(ov511, &p))
+                               return -EIO;
+                                                       
                        if (copy_to_user(arg, &p, sizeof(p)))
                                return -EFAULT;
 
@@ -1130,6 +1158,9 @@ static int ov511_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
 
                        if (copy_from_user(&p, arg, sizeof(p)))
                                return -EFAULT;
+                       
+                       if (ov7610_set_picture(ov511, &p))
+                               return -EIO;
 
                        return 0;
                }
@@ -1191,8 +1222,8 @@ static int ov511_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                                return -EFAULT;
 
 #if 0
-                       PDEBUG("MCAPTURE\n");
-                       PDEBUG("frame: %d, size: %dx%d, format: %d\n",
+                       PDEBUG("MCAPTURE");
+                       PDEBUG("frame: %d, size: %dx%d, format: %d",
                                vm.frame, vm.width, vm.height, vm.format);
 #endif
 
@@ -1212,7 +1243,7 @@ static int ov511_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                                ov511_mode_init_regs(ov511,
                                                     vm.width, vm.height, 0);
 #if 0
-                               PDEBUG("ov511: Setting frame %d to (%d, %d) : %d\n",
+                               PDEBUG("ov511: Setting frame %d to (%d, %d) : %d",
                                       vm.frame, vm.width, vm.height, 0);
 #endif
                        }
@@ -1233,7 +1264,7 @@ static int ov511_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                                return -EFAULT;
 
 #if 0
-                       PDEBUG("syncing to frame %d\n", frame);
+                       PDEBUG("syncing to frame %d", frame);
 #endif
                        switch (ov511->frame[frame].grabstate) {
                                case FRAME_UNUSED:
@@ -1306,7 +1337,7 @@ static long ov511_read(struct video_device *dev, char *buf, unsigned long count,
        int frmx = -1;
        volatile struct ov511_frame *frame;
 
-       PDEBUG("ov511_read: %ld bytes, noblock=%d\n", count, noblock);
+       PDEBUG("ov511_read: %ld bytes, noblock=%d", count, noblock);
 
        if (!dev || !buf)
                return -EFAULT;
@@ -1344,13 +1375,13 @@ restart:
 
        if (frame->grabstate == FRAME_ERROR) {
                frame->bytes_read = 0;
-               printk(KERN_ERR "ov511_read: errored frame %d\n", ov511->curframe);
+               err("ov511_read: errored frame %d", ov511->curframe);
                if (ov511_new_frame(ov511, frmx))
-                       printk(KERN_ERR "ov511_read: ov511_new_frame error\n");
+                       err("ov511_read: ov511_new_frame error");
                goto restart;
        }
 
-       PDEBUG("ov511_read: frmx=%d, bytes_read=%ld, scanlength=%ld\n", frmx,
+       PDEBUG("ov511_read: frmx=%d, bytes_read=%ld, scanlength=%ld", frmx,
                frame->bytes_read, frame->scanlength);
 
        /* copy bytes to user space; we allow for partials reads */
@@ -1361,7 +1392,7 @@ restart:
                return -EFAULT;
 
        frame->bytes_read += count;
-       PDEBUG("ov511_read: {copy} count used=%ld, new bytes_read=%ld\n",
+       PDEBUG("ov511_read: {copy} count used=%ld, new bytes_read=%ld",
                count, frame->bytes_read);
 
        if (frame->bytes_read >= frame->scanlength) { /* All data has been read */
@@ -1370,7 +1401,7 @@ restart:
                /* Mark it as available to be used again. */
                ov511->frame[frmx].grabstate = FRAME_UNUSED;
                if (ov511_new_frame(ov511, frmx ? 0 : 1))
-                       printk(KERN_ERR "ov511_read: ov511_new_frame returned error\n");
+                       err("ov511_read: ov511_new_frame returned error");
        }
 
        return count;
@@ -1382,7 +1413,7 @@ static int ov511_mmap(struct video_device *dev, const char *adr, unsigned long s
        unsigned long start = (unsigned long)adr;
        unsigned long page, pos;
 
-       PDEBUG("mmap: %ld (%lX) bytes\n", size, size);
+       PDEBUG("mmap: %ld (%lX) bytes", size, size);
 
        if (size > (((2 * MAX_FRAME_SIZE) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
                return -EINVAL;
@@ -1450,12 +1481,11 @@ static int ov7610_configure(struct usb_device *dev)
                return -1;
        
 
-       if((ov511_i2c_read(dev, 0x1C) != 0x7F) ||
-          (ov511_i2c_read(dev, 0x1D) != 0xA2)) {
-               printk(KERN_ERR "ov511: Failed to read OV7610 ID. You might\n");
-               printk(KERN_ERR "ov511: not have an OV7610, or it may be\n");
-               printk(KERN_ERR "ov511: not responding. Report this to\n");
-               printk(KERN_ERR "ov511: mmcclelland@delphi.com\n");
+       if((ov511_i2c_read(dev, OV7610_REG_ID_HIGH) != 0x7F) ||
+          (ov511_i2c_read(dev, OV7610_REG_ID_LOW) != 0xA2)) {
+               err("Failed to read OV7610 ID. You might not have an OV7610,");
+               err("or it may be not responding. Report this to");
+               err("mmcclelland@delphi.com");
                return -1;
        }
 
@@ -1468,7 +1498,7 @@ static int ov511_configure(struct usb_ov511 *ov511)
 
        /* Set altsetting 0 */
        if (usb_set_interface(dev, ov511->iface, 0) < 0) {
-               printk(KERN_ERR "ov511: usb_set_interface error\n");
+               err("usb_set_interface error");
                return -EBUSY;
        }
 
@@ -1478,7 +1508,7 @@ static int ov511_configure(struct usb_ov511 *ov511)
        init_waitqueue_head(&ov511->frame[1].wq);
 
        if (video_register_device(&ov511->vdev, VFL_TYPE_GRABBER) == -1) {
-               printk(KERN_ERR "ov511: video_register_device failed\n");
+               err("video_register_device failed");
                return -EBUSY;
        }
 
@@ -1488,7 +1518,7 @@ static int ov511_configure(struct usb_ov511 *ov511)
 
        /* Initialize system */
        if (ov511_reg_write(dev, OV511_REG_SYSTEM_INIT, 0x01) < 0) {
-               printk(KERN_ERR "ov511: enable system: command failed\n");
+               err("enable system: command failed");
                goto error;
        }
 
@@ -1497,13 +1527,13 @@ static int ov511_configure(struct usb_ov511 *ov511)
                goto error;
 
        if(ov7610_configure(dev) < 0) {
-               printk(KERN_ERR "ov511: failed to configure OV7610\n");
+               err("failed to configure OV7610");
                goto error;     
        }
 
        /* Disable compression */
        if (ov511_reg_write(dev, OV511_OMNICE_ENABLE, 0x00) < 0) {
-               printk(KERN_ERR "ov511: disable compression: command failed\n");
+               err("disable compression: command failed");
                goto error;
        }
 
@@ -1539,7 +1569,7 @@ static void* ov511_probe(struct usb_device *dev, unsigned int ifnum)
        struct usb_ov511 *ov511;
        int rc;
 
-       PDEBUG("probing for device...\n");
+       PDEBUG("probing for device...");
 
        /* We don't handle multi-config cameras */
        if (dev->descriptor.bNumConfigurations != 1)
@@ -1563,7 +1593,7 @@ static void* ov511_probe(struct usb_device *dev, unsigned int ifnum)
        printk(KERN_INFO "ov511: USB OV511-based camera found\n");
 
        if ((ov511 = kmalloc(sizeof(*ov511), GFP_KERNEL)) == NULL) {
-               printk(KERN_ERR "ov511: couldn't kmalloc ov511 struct\n");
+               err("couldn't kmalloc ov511 struct");
                return NULL;
        }
 
@@ -1574,7 +1604,7 @@ static void* ov511_probe(struct usb_device *dev, unsigned int ifnum)
 
        rc = ov511_reg_read(dev, OV511_REG_SYSTEM_CUSTOM_ID);
        if (rc < 0) {
-               printk("ov511: Unable to read camera bridge registers\n");
+               err("Unable to read camera bridge registers");
                return NULL;
        }
        
@@ -1595,9 +1625,9 @@ static void* ov511_probe(struct usb_device *dev, unsigned int ifnum)
                printk("ov511: Camera is a AverMedia InterCam Elite\n");
                break;
        default:
-               printk("ov511: Specific camera type (%d) not recognized\n", rc);
-               printk("ov511: Please contact mmcclelland@delphi.com to request\n");
-               printk("ov511: support for your camera.\n");
+               err("Specific camera type (%d) not recognized", rc);
+               err("Please contact mmcclelland@delphi.com to request");
+               err("support for your camera.");
                return NULL;
        }
 
@@ -1607,7 +1637,7 @@ static void* ov511_probe(struct usb_device *dev, unsigned int ifnum)
                return ov511;
        }
        else {
-               printk(KERN_ERR "ov511: Failed to configure camera\n");
+               err("Failed to configure camera");
                return NULL;
        }
        
@@ -1637,7 +1667,7 @@ static struct usb_driver ov511_driver = {
 
 int usb_ov511_init(void)
 {
-       PDEBUG("usb_ov511_init()\n");
+       PDEBUG("usb_ov511_init()");
        
        EXPORT_NO_SYMBOLS;
        
@@ -1659,7 +1689,7 @@ void cleanup_module(void)
 {
        usb_ov511_cleanup();
        
-       PDEBUG("Module unloaded\n");
+       PDEBUG("Module unloaded");
 }
 #endif
 
index 3dbaae80c625d26aa06b1d8fbcba43b3f65d78d6..3f41e382dfc0ad891594ebecdd49ccbd2cecc63f 100644 (file)
@@ -6,9 +6,9 @@
 #define OV511_DEBUG    /* Turn on debug messages */
 
 #ifdef OV511_DEBUG
-#  define PDEBUG(fmt, args...) printk("ov511: " fmt, ## args)
+#  define PDEBUG(fmt, args...) printk("ov511: " fmt "\n" , ## args)
 #else
-#  define PDEBUG(fmt, args...) /* Nothing */
+#  define PDEBUG(fmt, args...) do {} while(0)
 #endif
 
 /* Camera interface register numbers */
 #define OV511_ALTERNATE_SIZE_257       6
 #define OV511_ALTERNATE_SIZE_0         7
 
+/* ov7610 registers */
+#define OV7610_REG_GAIN          0x00
+#define OV7610_REG_BLUE          0x01
+#define OV7610_REG_RED           0x02
+#define OV7610_REG_SAT           0x03
+#define OV7610_REG_CNT           0x05
+#define OV7610_REG_BRT           0x06
+#define OV7610_REG_BLUE_BIAS     0x0C
+#define OV7610_REG_RED_BIAS      0x0D
+#define OV7610_REG_GAMMA_COEFF   0x0E
+#define OV7610_REG_WB_RANGE      0x0F
+#define OV7610_REG_EXP           0x10
+#define OV7610_REG_CLOCK         0x11
+#define OV7610_REG_COM_A         0x12
+#define OV7610_REG_COM_B         0x13
+#define OV7610_REG_COM_C         0x14
+#define OV7610_REG_COM_D         0x15
+#define OV7610_REG_FIELD_DIVIDE  0x16
+#define OV7610_REG_HWIN_START    0x17
+#define OV7610_REG_HWIN_END      0x18
+#define OV7610_REG_VWIN_START    0x19
+#define OV7610_REG_VWIN_END      0x1A
+#define OV7610_REG_PIXEL_SHIFT   0x1B
+#define OV7610_REG_ID_HIGH       0x1C
+#define OV7610_REG_ID_LOW        0x1D
+#define OV7610_REG_COM_E         0x20
+#define OV7610_REG_YOFFSET       0x21
+#define OV7610_REG_UOFFSET       0x22
+#define OV7610_REG_ECW           0x24
+#define OV7610_REG_ECB           0x25
+#define OV7610_REG_COM_F         0x26
+#define OV7610_REG_COM_G         0x27
+#define OV7610_REG_COM_H         0x28
+#define OV7610_REG_COM_I         0x29
+#define OV7610_REG_FRAMERATE_H   0x2A
+#define OV7610_REG_FRAMERATE_L   0x2B
+#define OV7610_REG_ALC           0x2C
+#define OV7610_REG_COM_J         0x2D
+#define OV7610_REG_VOFFSET       0x2E
+#define OV7610_REG_YGAMMA        0x33
+#define OV7610_REG_BIAS_ADJUST   0x34
+#define OV7610_REG_COM_L         0x35
+#define OV7610_REG_COM_K         0x38
+
 
 #define STREAM_BUF_SIZE        (PAGE_SIZE * 4)
 
index 6fb7df722f51e773f4f8b2c97f6a0aa7d59101ba..9dc624bc59758370c223c5d50baf1aa10bee7338 100644 (file)
-/* Driver for USB Printers
- * 
- * Copyright 1999 Michael Gee (michael@linuxspecific.com)
- * Copyright 1999 Pavel Machek (pavel@suse.cz)
+/*
+ * printer.c  Version 0.1
+ *
+ * Copyright (c) 1999 Michael Gee      <michael@linuxspecific.com>
+ * Copyright (c) 1999 Pavel Machek      <pavel@suse.cz>
+ * Copyright (c) 2000 Vojtech Pavlik    <vojtech@suse.cz>
+ *
+ * USB Printer Device Class driver for USB printers and printer cables
+ *
+ * Sponsored by SuSE
+ *
+ * ChangeLog:
+ *     v0.1 - thorough cleaning, URBification, almost a rewrite
+ *     v0.2 - some more cleanups
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- * Distribute under GPL version 2 or later.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/signal.h>
-#include <linux/errno.h>
-#include <linux/miscdevice.h>
-#include <linux/random.h>
 #include <linux/poll.h>
 #include <linux/init.h>
 #include <linux/malloc.h>
 #include <linux/lp.h>
-#include <linux/spinlock.h>
+
+#define DEBUG
 
 #include "usb.h"
 
-/* Define IEEE_DEVICE_ID if you want to see the IEEE-1284 Device ID string.
- * This may include the printer's serial number.
- * An example from an HP 970C DeskJet printer is (this is one long string,
- * with the serial number changed):
-MFG:HEWLETT-PACKARD;MDL:DESKJET 970C;CMD:MLC,PCL,PML;CLASS:PRINTER;DESCRIPTION:Hewlett-Packard DeskJet 970C;SERN:US970CSEPROF;VSTATUS:$HB0$NC0,ff,DN,IDLE,CUT,K1,C0,DP,NR,KP000,CP027;VP:0800,FL,B0;VJ:                    ;
+#define USBLP_BUF_SIZE         8192
+
+/*
+ * USB Printer Requests
  */
-#define IEEE_DEVICE_ID
 
-#define NAK_TIMEOUT (HZ)                               /* stall wait for printer */
-#define MAX_RETRY_COUNT ((60*60*HZ)/NAK_TIMEOUT)       /* should not take 1 minute a page! */
+#define USBLP_REQ_GET_ID       0x00
+#define USBLP_REQ_GET_STATUS   0x01
+#define USBLP_REQ_RESET                0x02
+
+#define USBLP_MINORS           16
+#define USBLP_MINOR_BASE       0
 
-#define BIG_BUF_SIZE                   8192
-#define SUBCLASS_PRINTERS              1
-#define PROTOCOL_UNIDIRECTIONAL                1
-#define PROTOCOL_BIDIRECTIONAL         2
+#define USBLP_WRITE_TIMEOUT    (60*HZ)                         /* 60 seconds */
+
+struct usblp {
+       struct usb_device       *dev;                           /* USB device */
+       struct urb              readurb, writeurb;              /* The urbs */
+       wait_queue_head_t       readwait, writewait, pollwait;  /* Zzzzz ... */
+       int                     readcount;                      /* Counter for reads */
+       int                     ifnum;                          /* Interface number */
+       unsigned int            minor;                          /* minor number of device */
+       unsigned char           used;                           /* True if open */
+       unsigned char           bidir;                          /* interface is bidirectional */
+};
+
+static struct usblp *usblp_table[USBLP_MINORS] = { NULL, /* ... */ };
 
 /*
- * USB Printer Requests
+ * Functions for usblp control messages.
  */
-#define USB_PRINTER_REQ_GET_DEVICE_ID  0
-#define USB_PRINTER_REQ_GET_PORT_STATUS        1
-#define USB_PRINTER_REQ_SOFT_RESET     2
-
-#define MAX_PRINTERS   8
-
-struct pp_usb_data {
-       struct usb_device       *pusb_dev;
-       __u8                    isopen;                 /* True if open */
-       __u8                    noinput;                /* True if no input stream */
-       __u8                    minor;                  /* minor number of device */
-       __u8                    status;                 /* last status from device */
-       int                     maxin, maxout;          /* max transfer size in and out */
-       char                    *obuf;                  /* transfer buffer (out only) */
-       wait_queue_head_t       wait_q;                 /* for timeouts */
-       unsigned int            last_error;             /* save for checking */
-       int                     bulk_in_ep;             /* Bulk IN endpoint */
-       int                     bulk_out_ep;            /* Bulk OUT endpoint */
-       int                     bulk_in_index;          /* endpoint[bulk_in_index] */
-       int                     bulk_out_index;         /* endpoint[bulk_out_index] */
-};
 
-static struct pp_usb_data *minor_data[MAX_PRINTERS];
+static int usblp_ctrl_msg(struct usblp *usblp, int request, int dir, int recip, void *buf, int len)
+{
+       int retval = usb_control_msg(usblp->dev,
+               dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0),
+               request, USB_TYPE_CLASS | dir | recip, 0, usblp->ifnum, buf, len, HZ * 5);
+       dbg("usblp_control_msg: rq: 0x%02x dir: %d recip: %d len: %#x result: %d", request, !!dir, recip, len, retval);
+       return retval < 0 ? retval : 0;
+}
 
-#define PPDATA(x) ((struct pp_usb_data *)(x))
+#define usblp_read_status(usblp, status)\
+       usblp_ctrl_msg(usblp, USBLP_REQ_GET_STATUS, USB_DIR_IN, USB_RECIP_INTERFACE, status, 1)
+#define usblp_get_id(usblp, id, maxlen)\
+       usblp_ctrl_msg(usblp, USBLP_REQ_GET_ID, USB_DIR_IN, USB_RECIP_INTERFACE, id, maxlen)
+#define usblp_reset(usblp)\
+       usblp_ctrl_msg(usblp, USBLP_REQ_RESET, USB_DIR_OUT, USB_RECIP_OTHER, NULL, 0)
 
-static unsigned char printer_read_status(struct pp_usb_data *p)
+/*
+ * URB callback.
+ */
+
+static void usblp_bulk(struct urb *urb)
 {
-       __u8 status;
-       int err;
-       struct usb_device *dev = p->pusb_dev;
-
-       err = usb_control_msg(dev, usb_rcvctrlpipe(dev,0),
-               USB_PRINTER_REQ_GET_PORT_STATUS,
-               USB_TYPE_CLASS | USB_RT_INTERFACE | USB_DIR_IN,
-               0, 0, &status, sizeof(status), HZ);
-       if (err < 0) {
-               printk(KERN_ERR "usblp%d: read_status control_msg error = %d\n",
-                       p->minor, err);
-               return 0;
-       }
-       return status;
+       struct usblp *usblp = urb->context;
+
+       if (!usblp || !usblp->dev || !usblp->used)
+               return;
+
+       if (urb->status)
+               warn("nonzero read bulk status received: %d", urb->status);
+
+       if (urb == &usblp->writeurb)
+               wake_up_interruptible(&usblp->writewait);
+
+       if (urb == &usblp->readurb)
+               wake_up_interruptible(&usblp->readwait);
+
+       wake_up_interruptible(&usblp->pollwait);
 }
 
-static int printer_check_status(struct pp_usb_data *p)
+/*
+ * Get and print printer errors.
+ */
+
+static int usblp_check_status(struct usblp *usblp)
 {
-       unsigned int last = p->last_error;
-       unsigned char status = printer_read_status(p);
-
-       if (status & LP_PERRORP)
-               /* No error. */
-               last = 0;
-       else if ((status & LP_POUTPA)) {
-               if (last != LP_POUTPA) {
-                       last = LP_POUTPA;
-                       printk(KERN_INFO "usblp%d out of paper (%x)\n", p->minor, status);
+       unsigned char status;
+
+       if (usblp_read_status(usblp, &status)) {
+               err("failed reading usblp status");
+               return -EIO;
+       }
+
+       if (status & LP_PERRORP) {
+       
+               if (status & LP_POUTPA) {
+                       info("usblp%d: out of paper", usblp->minor);
+                       return -ENOSPC;
                }
-       } else if (!(status & LP_PSELECD)) {
-               if (last != LP_PSELECD) {
-                       last = LP_PSELECD;
-                       printk(KERN_INFO "usblp%d off-line (%x)\n", p->minor, status);
+               if (~status & LP_PSELECD) {
+                       info("usblp%d: off-line", usblp->minor);
+                       return -EIO;
                }
-       } else {
-               if (last != LP_PERRORP) {
-                       last = LP_PERRORP;
-                       printk(KERN_INFO "usblp%d on fire (%x)\n", p->minor, status);
+               if (~status & LP_PERRORP) {
+                       info("usblp%d: on fire", usblp->minor);
+                       return -EIO;
                }
        }
 
-       p->last_error = last;
-       return status;
+       return 0;
 }
 
-static void printer_reset(struct pp_usb_data *p)
-{
-       struct usb_device *dev = p->pusb_dev;
-       int err;
-
-       err = usb_control_msg(dev, usb_sndctrlpipe(dev,0),
-               USB_PRINTER_REQ_SOFT_RESET,
-               USB_TYPE_CLASS | USB_RECIP_OTHER,
-               0, 0, NULL, 0, HZ);
-       if (err < 0)
-               printk(KERN_ERR "usblp%d: reset control_msg error = %d\n",
-                       p->minor, err);
-}
+/*
+ * File op functions.
+ */
 
-static int open_printer(struct inode *inode, struct file *file)
+static int usblp_open(struct inode *inode, struct file *file)
 {
-       struct pp_usb_data *p;
+       int minor = MINOR(inode->i_rdev) - USBLP_MINOR_BASE;
+       struct usblp *usblp;
+       int retval;
 
-       if (MINOR(inode->i_rdev) >= MAX_PRINTERS ||
-          !minor_data[MINOR(inode->i_rdev)]) {
+       if (minor < 0 || minor >= USBLP_MINORS)
                return -ENODEV;
-       }
 
-       p = minor_data[MINOR(inode->i_rdev)];
-       p->minor = MINOR(inode->i_rdev);
+       usblp  = usblp_table[minor];
 
-       if (p->isopen++) {
-               printk(KERN_ERR "usblp%d: printer is already open\n",
-                       p->minor);
-               return -EBUSY;
-       }
-       if (!(p->obuf = (char *)__get_free_page(GFP_KERNEL))) {
-               p->isopen = 0;
-               printk(KERN_ERR "usblp%d: cannot allocate memory\n",
-                       p->minor);
-               return -ENOMEM;
-       }
+       if (!usblp || !usblp->dev)
+               return -ENODEV;
 
-       printer_check_status(p);
+       if (usblp->used)
+               return -EBUSY;
 
-       file->private_data = p;
-//     printer_reset(p);
-       init_waitqueue_head(&p->wait_q);
+       if ((retval = usblp_check_status(usblp)))
+               return retval;
 
        MOD_INC_USE_COUNT;
+       usblp->used = 1;
+       file->private_data = usblp;
+
+       usblp->writeurb.transfer_buffer_length = 0;
+       usblp->writeurb.status = 0;
+       usblp->readcount = 0;
+
+       usb_submit_urb(&usblp->readurb);
        return 0;
 }
 
-static int close_printer(struct inode *inode, struct file *file)
+static int usblp_release(struct inode *inode, struct file *file)
 {
-       struct pp_usb_data *p = file->private_data;
-
-       free_page((unsigned long)p->obuf);
-       p->isopen = 0;
-       file->private_data = NULL;
-       /* free the resources if the printer is no longer around */
-       if (!p->pusb_dev) {
-               minor_data[p->minor] = NULL;
-               kfree(p);
-       }
+       struct usblp *usblp = file->private_data;
+
        MOD_DEC_USE_COUNT;
+       usblp->used = 0;
+                       
+       if (usblp->dev) {
+               usb_unlink_urb(&usblp->readurb);
+               usb_unlink_urb(&usblp->writeurb);
+               return 0;
+       }
+
+       usblp_table[usblp->minor] = NULL;
+       kfree(usblp);
+
        return 0;
 }
 
-static ssize_t write_printer(struct file *file,
-       const char *buffer, size_t count, loff_t *ppos)
+static unsigned int usblp_poll(struct file *file, struct poll_table_struct *wait)
 {
-       struct pp_usb_data *p = file->private_data;
-       unsigned long copy_size;
-       unsigned long bytes_written = 0;
-       unsigned long partial;
-       int result = USB_ST_NOERROR;
-       int maxretry;
-
-       do {
-               char *obuf = p->obuf;
-               unsigned long thistime;
-
-               thistime = copy_size = (count > p->maxout) ? p->maxout : count;
-               if (copy_from_user(p->obuf, buffer, copy_size))
-                       return -EFAULT;
-               maxretry = MAX_RETRY_COUNT;
-
-               while (thistime) {
-                       if (!p->pusb_dev)
-                               return -ENODEV;
-                       if (signal_pending(current)) {
-                               return bytes_written ? bytes_written : -EINTR;
-                       }
-                       result = usb_bulk_msg(p->pusb_dev,
-                                        usb_sndbulkpipe(p->pusb_dev, p->bulk_out_ep),
-                                        obuf, thistime, &partial, HZ*20);
-                       if (partial) {
-                               obuf += partial;
-                               thistime -= partial;
-                               maxretry = MAX_RETRY_COUNT;
-                       }
-                       if (result == USB_ST_TIMEOUT) { /* NAK - so hold for a while */
-                               if (!maxretry--)
-                                       return -ETIME;
-                                interruptible_sleep_on_timeout(&p->wait_q, NAK_TIMEOUT);
-                               continue;
-                       } else if (!result && !partial) {
-                               break;
+       struct usblp *usblp = file->private_data;
+
+       poll_wait(file, &usblp->pollwait, wait);
+
+       return (usblp->readurb.status  == -EINPROGRESS ? 0 : POLLIN  | POLLRDNORM)
+            | (usblp->writeurb.status == -EINPROGRESS ? 0 : POLLOUT | POLLWRNORM);
+}
+
+static ssize_t usblp_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
+{
+       DECLARE_WAITQUEUE(wait, current);
+       struct usblp *usblp = file->private_data;
+       int retval, timeout, writecount = 0;
+
+       while (writecount < count) {
+
+               if (usblp->writeurb.status == -EINPROGRESS) {
+
+                       if (file->f_flags & O_NONBLOCK)
+                               return -EAGAIN;
+
+                       timeout = USBLP_WRITE_TIMEOUT;
+                       while (timeout && usblp->writeurb.status == -EINPROGRESS) {
+
+                               if (signal_pending(current))
+                                       return writecount ? writecount : -EINTR;
+
+                               timeout = interruptible_sleep_on_timeout(&usblp->writewait, timeout);   
                        }
-               };
-               if (result) {
-                       /* whoops - let's reset and fail the request */
-//                     printk("Whoops - %x\n", result);
-                       printer_reset(p);
-                       interruptible_sleep_on_timeout(&p->wait_q, 5*HZ);  /* let reset do its stuff */
+               }
+
+               if (usblp->writeurb.status == -EINPROGRESS) {
+                       usb_unlink_urb(&usblp->writeurb);
+                       err("usblp%d: timed out", usblp->minor);
                        return -EIO;
                }
-               bytes_written += copy_size;
-               count -= copy_size;
-               buffer += copy_size;
-       } while ( count > 0 );
 
-       return bytes_written ? bytes_written : -EIO;
+               if (!usblp->dev)
+                       return -ENODEV;
+
+               if (!usblp->writeurb.status)
+                       writecount += usblp->writeurb.transfer_buffer_length;
+               else {
+                       if (!(retval = usblp_check_status(usblp))) {
+                               err("usblp%d: error %d writing to printer",
+                                       usblp->minor, usblp->writeurb.status);
+                               return -EIO;
+                       }
+
+                       return retval;
+               }
+       
+               if (writecount == count)
+                       continue;
+
+               usblp->writeurb.transfer_buffer_length = (count - writecount) < USBLP_BUF_SIZE ?
+                                                        (count - writecount) : USBLP_BUF_SIZE;
+
+               if (copy_from_user(usblp->writeurb.transfer_buffer, buffer + writecount,
+                               usblp->writeurb.transfer_buffer_length)) return -EFAULT;
+
+               usb_submit_urb(&usblp->writeurb);
+       }
+
+       return count;
 }
 
-static ssize_t read_printer(struct file *file,
-       char *buffer, size_t count, loff_t *ppos)
+static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
-       struct pp_usb_data *p = file->private_data;
-       int read_count = 0;
-       int this_read;
-       char buf[64];
-       unsigned long partial;
-       int result;
-       
-       if (p->noinput)
+       struct usblp *usblp = file->private_data;
+       DECLARE_WAITQUEUE(wait, current);
+
+       if (!usblp->bidir)
                return -EINVAL;
 
-       while (count) {
-               if (signal_pending(current)) {
-                       return read_count ? read_count : -EINTR;
-               }
-               if (!p->pusb_dev)
-                       return -ENODEV;
+       if (usblp->readurb.status == -EINPROGRESS) {
 
-               this_read = (count > sizeof(buf)) ? sizeof(buf) : count;
-               result = usb_bulk_msg(p->pusb_dev,
-                         usb_rcvbulkpipe(p->pusb_dev, p->bulk_in_ep),
-                         buf, this_read, &partial, HZ*20);
-               if (result < 0)
-                       printk(KERN_ERR "usblp%d read_printer bulk_msg error = %d\n",
-                               p->minor, result);
-
-               /* unlike writes, we don't retry a NAK, just stop now */
-               if (!result & partial)
-                       count = this_read = partial;
-               else if (result)
-                       return -EIO;
+               if (file->f_flags & O_NONBLOCK)
+                       return -EAGAIN;
 
-               if (this_read) {
-                       if (copy_to_user(buffer, buf, this_read))
-                               return -EFAULT;
-                       count -= this_read;
-                       read_count += this_read;
-                       buffer += this_read;
+               while (usblp->readurb.status == -EINPROGRESS) {
+                       if (signal_pending(current))
+                               return -EINTR;
+                       interruptible_sleep_on(&usblp->readwait);       
                }
        }
 
-       return read_count;
+       if (!usblp->dev)
+               return -ENODEV;
+
+       if (usblp->readurb.status) {
+               err("usblp%d: error %d reading from printer",
+                       usblp->minor, usblp->readurb.status);
+               usb_submit_urb(&usblp->readurb);
+               return -EIO;
+       }
+
+       count = count < usblp->readurb.actual_length - usblp->readcount ?
+               count : usblp->readurb.actual_length - usblp->readcount;
+
+       if (copy_to_user(buffer, usblp->readurb.transfer_buffer + usblp->readcount, count))
+               return -EFAULT;
+
+       if ((usblp->readcount += count) == usblp->readurb.actual_length)
+               usb_submit_urb(&usblp->readurb);
+
+       return count;
 }
 
-static void *printer_probe(struct usb_device *dev, unsigned int ifnum)
+static void *usblp_probe(struct usb_device *dev, unsigned int ifnum)
 {
        struct usb_interface_descriptor *interface;
-       struct pp_usb_data *pp;
-       int i;
-       __u8 status;
-
-       /*
-        * FIXME - this will not cope with combined printer/scanners
-        */
-       if ((dev->descriptor.bDeviceClass != USB_CLASS_PRINTER &&
-           dev->descriptor.bDeviceClass != 0) ||
-           dev->descriptor.bNumConfigurations != 1 ||
-           dev->actconfig->bNumInterfaces != 1) {
-               return NULL;
-       }
+       struct usb_endpoint_descriptor *epread, *epwrite;
+       struct usblp *usblp;
+       int minor, i, alts = -1, bidir = 0;
+       char *buf;
 
-       interface = &dev->actconfig->interface[ifnum].altsetting[0];
 
-       /* Let's be paranoid (for the moment). */
-       if (interface->bInterfaceClass != USB_CLASS_PRINTER ||
-           interface->bInterfaceSubClass != SUBCLASS_PRINTERS ||
-           (interface->bInterfaceProtocol != PROTOCOL_BIDIRECTIONAL &&
-           interface->bInterfaceProtocol != PROTOCOL_UNIDIRECTIONAL) ||
-           interface->bNumEndpoints > 2) {
-               return NULL;
+       for (i = 0; i < dev->actconfig->interface[ifnum].num_altsetting; i++) {
+
+               interface = &dev->actconfig->interface[ifnum].altsetting[i];
+
+               if (interface->bInterfaceClass != 7 || interface->bInterfaceSubClass != 1 ||
+                  (interface->bInterfaceProtocol != 1 && interface->bInterfaceProtocol != 2) ||
+                  (interface->bInterfaceProtocol > interface->bNumEndpoints))
+                       continue;
+
+               if (alts == -1)
+                       alts = i;
+
+               if (!bidir && interface->bInterfaceProtocol == 2) {
+                       bidir = 1;
+                       alts = i;
+               }
        }
 
-       /* Does this (these) interface(s) support bulk transfers? */
-       if ((interface->endpoint[0].bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
-             != USB_ENDPOINT_XFER_BULK) {
+       if (alts == -1)
                return NULL;
+
+       interface = &dev->actconfig->interface[ifnum].altsetting[alts];
+       if (usb_set_interface(dev, ifnum, alts))
+               err("can't set desired altsetting %d on interface %d", alts, ifnum);
+
+       epwrite = interface->endpoint + 0;
+       epread = NULL;
+
+       if (bidir) {
+               epread  = interface->endpoint + 1;
+               if ((epread->bEndpointAddress & 0x80) != 0x80) {
+                       epwrite = interface->endpoint + 1;
+                       epread  = interface->endpoint + 0;
+
+                       if ((epread->bEndpointAddress & 0x80) != 0x80)
+                               return NULL;
+               }
        }
-       if ((interface->bNumEndpoints > 1) &&
-             ((interface->endpoint[1].bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
-             != USB_ENDPOINT_XFER_BULK)) {
+
+       if ((epwrite->bEndpointAddress & 0x80) == 0x80)
                return NULL;
-       }
 
-       /*
-        *  Does this interface have at least one OUT endpoint
-        *  that we can write to: endpoint index 0 or 1?
-        */
-       if ((interface->endpoint[0].bEndpointAddress & USB_ENDPOINT_DIR_MASK)
-             != USB_DIR_OUT &&
-           (interface->bNumEndpoints > 1 &&
-             (interface->endpoint[1].bEndpointAddress & USB_ENDPOINT_DIR_MASK)
-             != USB_DIR_OUT)) {
-               return NULL;
-       }
-
-       for (i=0; i<MAX_PRINTERS; i++) {
-               if (!minor_data[i])
-                       break;
+       for (minor = 0; minor < USBLP_MINORS && usblp_table[minor]; minor++);
+       if (usblp_table[minor]) {
+               err("no more free usblp devices");
+               return NULL;
        }
-       if (i >= MAX_PRINTERS) {
-               printk(KERN_ERR "No minor table space available for new USB printer\n");
+
+       if (!(usblp = kmalloc(sizeof(struct usblp), GFP_KERNEL))) {
+               err("out of memory");
                return NULL;
        }
+       memset(usblp, 0, sizeof(struct usblp));
 
-       printk(KERN_INFO "USB printer found at address %d\n", dev->devnum);
+       usblp->dev = dev;
+       usblp->ifnum = ifnum;
+       usblp->minor = minor;
+       usblp->bidir = bidir;
 
-       if (!(pp = kmalloc(sizeof(struct pp_usb_data), GFP_KERNEL))) {
-               printk(KERN_DEBUG "USB printer: no memory!\n");
+       init_waitqueue_head(&usblp->writewait);
+       init_waitqueue_head(&usblp->readwait);
+       init_waitqueue_head(&usblp->pollwait);
+
+       if (!(buf = kmalloc(USBLP_BUF_SIZE * (bidir ? 2 : 1), GFP_KERNEL))) {
+               err("out of memory");
+               kfree(usblp);
                return NULL;
        }
 
-       memset(pp, 0, sizeof(struct pp_usb_data));
-       minor_data[i] = PPDATA(pp);
-
-       pp->minor = i;
-       pp->pusb_dev = dev;
-       pp->maxout = (BIG_BUF_SIZE > PAGE_SIZE) ? PAGE_SIZE : BIG_BUF_SIZE;
-       if (interface->bInterfaceProtocol != PROTOCOL_BIDIRECTIONAL)
-               pp->noinput = 1;
-
-       pp->bulk_out_index =
-               ((interface->endpoint[0].bEndpointAddress & USB_ENDPOINT_DIR_MASK)
-                 == USB_DIR_OUT) ? 0 : 1;
-       pp->bulk_in_index = pp->noinput ? -1 :
-               (pp->bulk_out_index == 0) ? 1 : 0;
-       pp->bulk_in_ep = pp->noinput ? -1 :
-               interface->endpoint[pp->bulk_in_index].bEndpointAddress &
-               USB_ENDPOINT_NUMBER_MASK;
-       pp->bulk_out_ep =
-               interface->endpoint[pp->bulk_out_index].bEndpointAddress &
-               USB_ENDPOINT_NUMBER_MASK;
-       if (interface->bInterfaceProtocol == PROTOCOL_BIDIRECTIONAL) {
-               pp->maxin =
-                       interface->endpoint[pp->bulk_in_index].wMaxPacketSize;
-       }
+       FILL_BULK_URB(&usblp->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress),
+               buf, 0, usblp_bulk, usblp);
 
-       printk(KERN_INFO "usblp%d Summary:\n", pp->minor);
-       printk(KERN_INFO "index=%d, maxout=%d, noinput=%d, maxin=%d\n",
-               i, pp->maxout, pp->noinput, pp->maxin);
-       printk(KERN_INFO "bulk_in_ix=%d, bulk_in_ep=%d, bulk_out_ix=%d, bulk_out_ep=%d\n",
-               pp->bulk_in_index,
-               pp->bulk_in_ep,
-               pp->bulk_out_index,
-               pp->bulk_out_ep);
-
-#ifdef IEEE_DEVICE_ID
-       {
-               __u8 ieee_id[64]; /* first 2 bytes are (big-endian) length */
-                               /* This string space may be too short. */
-               int length = (ieee_id[0] << 8) + ieee_id[1]; /* high-low */
-                               /* This calc. or be16_to_cpu() both get
-                                * some weird results for <length>. */
-               int err;
-
-               /* Let's get the device id if possible. */
-               err = usb_control_msg(dev, usb_rcvctrlpipe(dev,0),
-                   USB_PRINTER_REQ_GET_DEVICE_ID,
-                   USB_TYPE_CLASS | USB_RT_INTERFACE | USB_DIR_IN,
-                   0, 0, ieee_id,
-                   sizeof(ieee_id)-1, HZ);
-               if (err >= 0) {
-                       if (ieee_id[1] < sizeof(ieee_id) - 1)
-                               ieee_id[ieee_id[1]+2] = '\0';
-                       else
-                               ieee_id[sizeof(ieee_id)-1] = '\0';
-                       printk(KERN_INFO "usblp%d Device ID length=%d [%x:%x]\n",
-                               pp->minor, length, ieee_id[0], ieee_id[1]);
-                       printk(KERN_INFO "usblp%d Device ID=%s\n",
-                               pp->minor, &ieee_id[2]);
-               }
-               else
-                       printk(KERN_INFO "usblp%d: error = %d reading IEEE-1284 Device ID\n",
-                               pp->minor, err);
+       if (bidir) {
+               FILL_BULK_URB(&usblp->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress),
+                       buf + USBLP_BUF_SIZE, USBLP_BUF_SIZE, usblp_bulk, usblp);
        }
-#endif
 
-       status = printer_read_status(PPDATA(pp));
-       printk(KERN_INFO "usblp%d probe status is %x: %s,%s,%s\n",
-               pp->minor, status,
-               (status & LP_PSELECD) ? "Selected" : "Not Selected",
-               (status & LP_POUTPA)  ? "No Paper" : "Paper",
-               (status & LP_PERRORP) ? "No Error" : "Error");
+       printk(KERN_INFO "usblp%d: USB %sdirectional printer dev %d if %d alt %d\n",
+               minor, bidir ? "Bi" : "Uni", dev->devnum, ifnum, alts);
 
-       return pp;
+       return usblp_table[minor] = usblp;
 }
 
-static void printer_disconnect(struct usb_device *dev, void *ptr)
+static void usblp_disconnect(struct usb_device *dev, void *ptr)
 {
-       struct pp_usb_data *pp = ptr;
+       struct usblp *usblp = ptr;
 
-       if (pp->isopen) {
-               /* better let it finish - the release will do whats needed */
-               pp->pusb_dev = NULL;
+       if (!usblp || !usblp->dev) {
+               err("disconnect on nonexisting interface");
                return;
        }
-       minor_data[pp->minor] = NULL;
-       kfree(pp);
+
+       usblp->dev = NULL;
+
+       usb_unlink_urb(&usblp->readurb);
+       usb_unlink_urb(&usblp->writeurb);
+
+       kfree(usblp->writeurb.transfer_buffer);
+
+       if (usblp->used) return;
+
+       usblp_table[usblp->minor] = NULL;
+       kfree(usblp);
 }
 
-static struct file_operations usb_printer_fops = {
-       NULL,           /* seek */
-       read_printer,
-       write_printer,
-       NULL,           /* readdir */
-       NULL,           /* poll - out for the moment */
-       NULL,           /* ioctl */
-       NULL,           /* mmap */
-       open_printer,
-       NULL,           /* flush ? */
-       close_printer,
-       NULL,
-       NULL
+static struct file_operations usblp_fops = {
+       read:           usblp_read,
+       write:          usblp_write,
+       open:           usblp_open,
+       release:        usblp_release,
+       poll:           usblp_poll
 };
 
-static struct usb_driver printer_driver = {
-       "printer",
-       printer_probe,
-       printer_disconnect,
-       { NULL, NULL },
-       &usb_printer_fops,
-       0
+static struct usb_driver usblp_driver = {
+       name:           "usblp",
+       probe:          usblp_probe,
+       disconnect:     usblp_disconnect,
+       fops:           &usblp_fops,
+       minor:          USBLP_MINOR_BASE
 };
 
-int usb_printer_init(void)
+#ifdef MODULE
+void cleanup_module(void)
 {
-       if (usb_register(&printer_driver))
-               return -1;
-
-       printk(KERN_INFO "USB Printer driver registered.\n");
-       return 0;
+       usb_deregister(&usblp_driver);
 }
-
-#ifdef MODULE
 int init_module(void)
+#else
+int usb_printer_init(void)
+#endif
 {
-       return usb_printer_init();
-}
+       if (usb_register(&usblp_driver))
+               return -1;
 
-void cleanup_module(void)
-{
-       usb_deregister(&printer_driver);
+       return 0;
 }
-#endif
index 4fa5252588932a9fd1be0f898325196c69905f10..2cca351513eaa12d2e09c90f0404617e6c3227c0 100644 (file)
@@ -132,24 +132,6 @@ void usb_show_interface_descriptor(struct usb_interface_descriptor *desc)
        printk("    iInterface          =   %02x\n", desc->iInterface);
 }
 
-void usb_show_hid_descriptor(struct usb_hid_descriptor * desc)
-{
-       int i;
-    
-       printk("    HID:\n");
-       printk("      HID version %x.%02x\n", desc->bcdHID >> 8, desc->bcdHID & 0xff);
-       printk("      bLength             = %4d\n", desc->bLength);
-       printk("      bDescriptorType     =   %02x\n", desc->bDescriptorType);
-       printk("      bCountryCode        =   %02x\n", desc->bCountryCode);
-       printk("      bNumDescriptors     =   %02x\n", desc->bNumDescriptors);
-
-       for (i=0; i<desc->bNumDescriptors; i++) {
-               printk("        %d:\n", i);
-               printk("            bDescriptorType      =   %02x\n", desc->desc[i].bDescriptorType);
-               printk("            wDescriptorLength    =   %04x\n", desc->desc[i].wDescriptorLength);
-       }
-}
-
 void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *desc)
 {
        char *LengthCommentString = (desc->bLength ==
index a4006fc2fc22aae29b1b5b060d43bfe90ec412e1..723537b24acf9523ab8eab7f0fa70f210218ee41 100644 (file)
  *
  * See Documentation/usb-serial.txt for more information on using this driver.
  * 
+ *
+ * (01/17/2000) gkh
+ *     Fixed the WhiteHEAT firmware (my processing tool had a bug)
+ *     and added new debug loader firmware for it.
+ *     Removed the put_char function as it isn't really needed.
+ *     Added visor startup commands as found by the Win98 dump.
+ * 
  * (01/13/2000) gkh
  *     Fixed the vendor id for the generic driver to the one I meant it to be.
  *
@@ -82,6 +89,7 @@
  * 
  */
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/signal.h>
 #include <linux/module.h>
 #include <linux/spinlock.h>
 
-#ifdef CONFIG_USB_SERIAL_WHITEHEAT
-#include "whiteheat.h"         /* firmware for the ConnectTech WhiteHEAT device */
-#endif
-
 #define DEBUG
 
 #include "usb.h"
 
+#ifdef CONFIG_USB_SERIAL_WHITEHEAT
+#include "whiteheat.h"         /* firmware for the ConnectTech WhiteHEAT device */
+#endif
+
 /* Module information */
 MODULE_AUTHOR("Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux-usb/");
 MODULE_DESCRIPTION("USB Serial Driver");
@@ -193,7 +201,6 @@ struct usb_serial_state {
 static int serial_open (struct tty_struct *tty, struct file * filp);
 static void serial_close (struct tty_struct *tty, struct file * filp);
 static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count);
-static void serial_put_char (struct tty_struct *tty, unsigned char ch);
 static int serial_write_room (struct tty_struct *tty);
 static int serial_chars_in_buffer (struct tty_struct *tty);
 static void serial_throttle (struct tty_struct * tty);
@@ -219,7 +226,6 @@ struct usb_serial_device_type {
        int  (*open)(struct tty_struct * tty, struct file * filp);
        void (*close)(struct tty_struct * tty, struct file * filp);
        int  (*write)(struct tty_struct * tty, int from_user,const unsigned char *buf, int count);
-       void (*put_char)(struct tty_struct *tty, unsigned char ch);
        int  (*write_room)(struct tty_struct *tty);
        int  (*chars_in_buffer)(struct tty_struct *tty);
        void (*throttle)(struct tty_struct * tty);
@@ -232,7 +238,6 @@ struct usb_serial_device_type {
 static int  generic_serial_open                (struct tty_struct *tty, struct file *filp);
 static void generic_serial_close       (struct tty_struct *tty, struct file *filp);
 static int  generic_serial_write       (struct tty_struct *tty, int from_user, const unsigned char *buf, int count);
-static void generic_serial_put_char    (struct tty_struct *tty, unsigned char ch);
 static int  generic_write_room         (struct tty_struct *tty);
 static int  generic_chars_in_buffer    (struct tty_struct *tty);
 
@@ -251,7 +256,6 @@ static struct usb_serial_device_type generic_device = {
        open:                   generic_serial_open,
        close:                  generic_serial_close,
        write:                  generic_serial_write,
-       put_char:               generic_serial_put_char,
        write_room:             generic_write_room,
        chars_in_buffer:        generic_chars_in_buffer,
 };
@@ -280,7 +284,6 @@ static struct usb_serial_device_type belkin_device = {
        open:                   etek_serial_open,
        close:                  etek_serial_close,
        write:                  generic_serial_write,
-       put_char:               generic_serial_put_char,
        write_room:             generic_write_room,
        chars_in_buffer:        generic_chars_in_buffer,
 };
@@ -304,7 +307,6 @@ static struct usb_serial_device_type peracom_device = {
        open:                   etek_serial_open,
        close:                  etek_serial_close,
        write:                  generic_serial_write,
-       put_char:               generic_serial_put_char,
        write_room:             generic_write_room,
        chars_in_buffer:        generic_chars_in_buffer,
 };
@@ -348,7 +350,6 @@ static struct usb_serial_device_type whiteheat_device = {
        open:                   whiteheat_serial_open,
        close:                  whiteheat_serial_close,
        write:                  generic_serial_write,
-       put_char:               generic_serial_put_char,
        write_room:             generic_write_room,
        chars_in_buffer:        generic_chars_in_buffer,
        throttle:               whiteheat_throttle,
@@ -363,6 +364,7 @@ static int  visor_serial_open               (struct tty_struct *tty, struct file *filp);
 static void visor_serial_close         (struct tty_struct *tty, struct file *filp);
 static void visor_throttle             (struct tty_struct *tty);
 static void visor_unthrottle           (struct tty_struct *tty);
+static int  visor_startup              (struct usb_serial_state *serial);
 
 /* All of the device info needed for the Handspring Visor */
 static __u16   handspring_vendor_id    = HANDSPRING_VENDOR_ID;
@@ -380,11 +382,11 @@ static struct usb_serial_device_type handspring_device = {
        open:                   visor_serial_open,
        close:                  visor_serial_close,
        write:                  generic_serial_write,
-       put_char:               generic_serial_put_char,
        write_room:             generic_write_room,
        chars_in_buffer:        generic_chars_in_buffer,
        throttle:               visor_throttle,
-       unthrottle:             visor_unthrottle
+       unthrottle:             visor_unthrottle,
+       startup:                visor_startup
 };
 #endif
 
@@ -580,39 +582,6 @@ static int serial_write (struct tty_struct * tty, int from_user, const unsigned
 }
 
 
-static void serial_put_char (struct tty_struct *tty, unsigned char ch)
-{
-       struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data; 
-       
-       dbg("serial_put_char");
-       
-       /* do some sanity checking that we really have a device present */
-       if (!serial) {
-               dbg("serial == NULL!");
-               return;
-       }
-       if (!serial->type) {
-               dbg("serial->type == NULL!");
-               return;
-       }
-       if (!serial->present) {
-               dbg("no device registered");
-               return;
-       }
-       if (!serial->active) {
-               dbg ("device not open");
-               return;
-       }
-
-       /* pass on to the driver specific version of this function */
-       if (serial->type->put_char) {
-               serial->type->put_char(tty, ch);
-       }
-
-       return;
-}      
-
-
 static int serial_write_room (struct tty_struct *tty) 
 {
        struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data; 
@@ -868,6 +837,9 @@ static int whiteheat_writememory (struct usb_serial_state *serial, int address,
 {
        int result;
        unsigned char *transfer_buffer =  kmalloc (length, GFP_KERNEL);
+
+//     dbg("whiteheat_writememory %x, %d", address, length);
+
        if (!transfer_buffer) {
                err("whiteheat_writememory: kmalloc(%d) failed.\n", length);
                return -ENOMEM;
@@ -883,8 +855,13 @@ static int whiteheat_writememory (struct usb_serial_state *serial, int address,
 
 static int whiteheat_set_reset (struct usb_serial_state *serial, unsigned char reset_bit)
 {
+       int     response;
        dbg("whiteheat_set_reset: %d", reset_bit);
-       return (whiteheat_writememory (serial, CPUCS_REG, &reset_bit, 1, 0xa0));
+       response = whiteheat_writememory (serial, CPUCS_REG, &reset_bit, 1, 0xa0);
+       if (response < 0) {
+               err("whiteheat_set_reset %d failed", reset_bit);
+       }
+       return (response);
 }
 
 
@@ -906,7 +883,7 @@ static int  whiteheat_startup (struct usb_serial_state *serial)
        int response;
        const struct whiteheat_hex_record *record;
        
-       dbg("whiteheat_startup\n");
+       dbg("whiteheat_startup");
        
        response = whiteheat_set_reset (serial, 1);
 
@@ -925,12 +902,12 @@ static int  whiteheat_startup (struct usb_serial_state *serial)
        response = whiteheat_set_reset (serial, 0);
 
        record = &whiteheat_firmware[0];
-       while (record->address < 0x8000) {
+       while (record->address < 0x1b40) {
                ++record;
        }
        while (record->address != 0xffff) {
                response = whiteheat_writememory (serial, record->address, 
-                               (unsigned char *)record->data, record->data_size, 0xa3);
+                               (unsigned char *)record->data, record->data_size, 0xa0);
                if (response < 0) {
                        err("whiteheat_writememory failed for first firmware step (%d %04X %p %d)", 
                                response, record->address, record->data, record->data_size);
@@ -942,11 +919,11 @@ static int  whiteheat_startup (struct usb_serial_state *serial)
        response = whiteheat_set_reset (serial, 1);
 
        record = &whiteheat_firmware[0];
-       while (record->address < 0x8000) {
+       while (record->address < 0x1b40) {
                response = whiteheat_writememory (serial, record->address, 
                                (unsigned char *)record->data, record->data_size, 0xa0);
                if (response < 0) {
-                       err("whiteheat_writememory failed for first firmware step (%d %04X %p %d)\n", 
+                       err("whiteheat_writememory failed for second firmware step (%d %04X %p %d)\n", 
                                response, record->address, record->data, record->data_size);
                        break;
                }
@@ -1025,6 +1002,79 @@ static void visor_unthrottle (struct tty_struct * tty)
 
        return;
 }
+
+
+/*
+ Here's the raw dump of the vendor specific command data that the Visor sends on Win98
+______________________________________________________________________
+SETUP(0xB4) ADDR(0x02) ENDP(0x0) CRC5(0x15)
+______________________________________________________________________
+DATA0(0xC3) DATA(C2 03 00 00 00 00 12 00 ) CRC16(0xB0BB)
+______________________________________________________________________
+ACK(0x4B)
+______________________________________________________________________
+IN(0x96) ADDR(0x02) ENDP(0x0) CRC5(0x15)
+______________________________________________________________________
+DATA1(0xD2) DATA(02 00 00 01 02 02 ) CRC16(0xF4E6)
+______________________________________________________________________
+ACK(0x4B)
+______________________________________________________________________
+OUT(0x87) ADDR(0x02) ENDP(0x0) CRC5(0x15)
+______________________________________________________________________
+DATA1(0xD2) DATA() CRC16(0x0000)
+______________________________________________________________________
+ACK(0x4B)
+______________________________________________________________________
+SETUP(0xB4) ADDR(0x02) ENDP(0x0) CRC5(0x15)
+______________________________________________________________________
+DATA0(0xC3) DATA(C2 01 00 00 05 00 02 00 ) CRC16(0xC488)
+______________________________________________________________________
+ACK(0x4B)
+______________________________________________________________________
+IN(0x96) ADDR(0x02) ENDP(0x0) CRC5(0x15)
+______________________________________________________________________
+DATA1(0xD2) DATA(01 00 ) CRC16(0xFFFB)
+______________________________________________________________________
+ACK(0x4B)
+______________________________________________________________________
+OUT(0x87) ADDR(0x02) ENDP(0x0) CRC5(0x15)
+______________________________________________________________________
+DATA1(0xD2) DATA() CRC16(0x0000)
+______________________________________________________________________
+ACK(0x4B)
+______________________________________________________________________
+*/
+
+static int  visor_startup (struct usb_serial_state *serial)
+{
+       /* send out two unknown commands that I found by looking at a Win98 trace */
+       int response;
+       unsigned char *transfer_buffer =  kmalloc (256, GFP_KERNEL);
+
+       if (!transfer_buffer) {
+               err("visor_startup: kmalloc(%d) failed.\n", 256);
+               return -ENOMEM;
+       }
+
+       dbg("visor_startup");
+
+       response = usb_control_msg (serial->dev, usb_sndctrlpipe(serial->dev, 0), 0x03, 0xc2, 0x0000, 0x0000, transfer_buffer, 0x12, 300);
+       if (response < 0) {
+               err("visor_startup: error getting first vendor specific message");
+       }
+
+       response = usb_control_msg (serial->dev, usb_sndctrlpipe(serial->dev, 0), 0x01, 0xc2, 0x0000, 0x0005, transfer_buffer, 0x02, 300);
+       if (response < 0) {
+               err("visor_startup: error getting first vendor specific message");
+       }
+
+       kfree (transfer_buffer);
+
+       /* continue on with initialization */
+       return (0);
+}
+
+
 #endif /* CONFIG_USB_SERIAL_VISOR*/
 
 
@@ -1117,27 +1167,6 @@ static int generic_serial_write (struct tty_struct * tty, int from_user, const u
 } 
 
 
-static void generic_serial_put_char (struct tty_struct *tty, unsigned char ch)
-{
-       struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data; 
-       
-       dbg("generic_serial_put_char");
-       
-       /* if we have a bulk out endpoint, then shove a character out it */
-       if (serial->num_bulk_out) {
-               /* send the single character out the bulk port */
-               memcpy (serial->write_urb.transfer_buffer, &ch, 1);
-               serial->write_urb.transfer_buffer_length = 1;
-
-               if (usb_submit_urb(&serial->write_urb))
-                       dbg("usb_submit_urb(write bulk) failed");
-
-       }
-
-       return;
-}
-
-
 static int generic_write_room (struct tty_struct *tty) 
 {
        struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data; 
@@ -1431,7 +1460,7 @@ static struct tty_driver serial_tty_driver = {
        open:                   serial_open,
        close:                  serial_close,
        write:                  serial_write,
-       put_char:               serial_put_char,
+       put_char:               NULL,
        flush_chars:            NULL,
        write_room:             serial_write_room,
        ioctl:                  NULL,
index ffe3eaac81d6bfa4c27c4ae9566ba5a265a27aed..bd9ac86e188ab6118a4d5a7c57d2faad16546f95 100644 (file)
@@ -566,9 +566,10 @@ static int usb_start_wait_urb(urb_t *urb, int timeout, unsigned long* rval)
                return status;
        }
 
-       if (urb->status == -EINPROGRESS)
-               status=schedule_timeout(timeout); // ZZzzzz....
-       else
+       if (urb->status == -EINPROGRESS) {
+               while (timeout && urb->status == -EINPROGRESS)
+                       status = timeout = schedule_timeout(timeout);
+       } else
                status = 1;
 
        remove_wait_queue(&wqh, &wait);
@@ -1291,7 +1292,7 @@ int usb_get_class_descriptor(struct usb_device *dev, unsigned char type,
                unsigned char id, unsigned char index, void *buf, int size)
 {
        return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
-               USB_REQ_GET_DESCRIPTOR, USB_RT_INTERFACE | USB_DIR_IN,
+               USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN,
                (type << 8) + id, index, buf, size, HZ * GET_TIMEOUT);
 }
 
@@ -1327,7 +1328,7 @@ int usb_get_protocol(struct usb_device *dev)
        int ret;
 
        if ((ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
-           USB_REQ_GET_PROTOCOL, USB_DIR_IN | USB_RT_HIDD,
+           USB_REQ_GET_PROTOCOL, USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
            0, 1, &type, 1, HZ * GET_TIMEOUT)) < 0)
                return ret;
 
@@ -1337,13 +1338,15 @@ int usb_get_protocol(struct usb_device *dev)
 int usb_set_protocol(struct usb_device *dev, int protocol)
 {
        return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
-               USB_REQ_SET_PROTOCOL, USB_RT_HIDD, protocol, 1, NULL, 0, HZ * SET_TIMEOUT);
+               USB_REQ_SET_PROTOCOL, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+               protocol, 1, NULL, 0, HZ * SET_TIMEOUT);
 }
 
 int usb_set_idle(struct usb_device *dev,  int duration, int report_id)
 {
-       return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_SET_IDLE,
-               USB_RT_HIDD, (duration << 8) | report_id, 1, NULL, 0, HZ * SET_TIMEOUT);
+       return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+               USB_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+               (duration << 8) | report_id, 1, NULL, 0, HZ * SET_TIMEOUT);
 }
 
 static void usb_set_maxpacket(struct usb_device *dev)
@@ -1386,14 +1389,14 @@ int usb_clear_halt(struct usb_device *dev, int endp)
 */
 
        result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
-               USB_REQ_CLEAR_FEATURE, USB_RT_ENDPOINT, 0, endp, NULL, 0, HZ * SET_TIMEOUT);
+               USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0, endp, NULL, 0, HZ * SET_TIMEOUT);
 
        /* don't clear if failed */
        if (result < 0)
                return result;
 
        result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
-               USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_ENDPOINT, 0, endp,
+               USB_REQ_GET_STATUS, USB_DIR_IN | USB_RECIP_ENDPOINT, 0, endp,
                &status, sizeof(status), HZ * SET_TIMEOUT);
        if (result < 0)
                return result;
@@ -1427,7 +1430,7 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
        }
 
        if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
-           USB_REQ_SET_INTERFACE, USB_RT_INTERFACE, alternate,
+           USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE, alternate,
            interface, NULL, 0, HZ * 5)) < 0)
                return ret;
 
@@ -1467,14 +1470,14 @@ int usb_set_configuration(struct usb_device *dev, int configuration)
 int usb_get_report(struct usb_device *dev, unsigned char type, unsigned char id, unsigned char index, void *buf, int size)
 {
        return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
-               USB_REQ_GET_REPORT, USB_DIR_IN | USB_RT_HIDD,
+               USB_REQ_GET_REPORT, USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                (type << 8) + id, index, buf, size, HZ * GET_TIMEOUT);
 }
 
 int usb_set_report(struct usb_device *dev, unsigned char type, unsigned char id, unsigned char index, void *buf, int size)
 {
        return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
-               USB_REQ_SET_REPORT, USB_RT_HIDD,
+               USB_REQ_SET_REPORT, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                (type << 8) + id, index, buf, size, HZ);
 }
 
index 96a1bf07584f437b3fa3acc162b9e12ef81254f1..01931da8c00b8ea580608e41bd42978a18089258 100644 (file)
 #define USB_CLASS_DATA                 10
 #define USB_CLASS_VENDOR_SPEC          0xff
 
+/*
+ * USB types
+ */
+#define USB_TYPE_STANDARD              (0x00 << 5)
+#define USB_TYPE_CLASS                 (0x01 << 5)
+#define USB_TYPE_VENDOR                        (0x02 << 5)
+#define USB_TYPE_RESERVED              (0x03 << 5)
+
+/*
+ * USB recipients
+ */
+#define USB_RECIP_DEVICE               0x00
+#define USB_RECIP_INTERFACE            0x01
+#define USB_RECIP_ENDPOINT             0x02
+#define USB_RECIP_OTHER                        0x03
+
+/*
+ * USB directions
+ */
+#define USB_DIR_OUT                    0
+#define USB_DIR_IN                     0x80
+
 /*
  * Descriptor types
  */
 #define USB_DT_INTERFACE               0x04
 #define USB_DT_ENDPOINT                        0x05
 
-#define USB_DT_HUB                     0x29
-#define USB_DT_HID                     0x21
-#define USB_DT_REPORT                  0x22
-#define USB_DT_PHYSICAL                        0x23
+#define USB_DT_HID                     (USB_TYPE_CLASS | 0x01)
+#define USB_DT_REPORT                  (USB_TYPE_CLASS | 0x02)
+#define USB_DT_PHYSICAL                        (USB_TYPE_CLASS | 0x03)
+#define USB_DT_HUB                     (USB_TYPE_CLASS | 0x09)
 
 /*
  * Descriptor sizes per descriptor type
 #define USB_DT_HID_SIZE                        9
 
 /*
- * USB Request Type and Endpoint Directions
+ * Endpoints
  */
-#define USB_DIR_OUT                    0
-#define USB_DIR_IN                     0x80
-
 #define USB_ENDPOINT_NUMBER_MASK       0x0f    /* in bEndpointAddress */
 #define USB_ENDPOINT_DIR_MASK          0x80
 
@@ -72,9 +91,7 @@
  */
 #define USB_REQ_GET_STATUS             0x00
 #define USB_REQ_CLEAR_FEATURE          0x01
-/* 0x02 is reserved */
 #define USB_REQ_SET_FEATURE            0x03
-/* 0x04 is reserved */
 #define USB_REQ_SET_ADDRESS            0x05
 #define USB_REQ_GET_DESCRIPTOR         0x06
 #define USB_REQ_SET_DESCRIPTOR         0x07
 #define USB_REQ_SYNCH_FRAME            0x0C
 
 /*
- * HIDD requests
+ * HID requests
  */
 #define USB_REQ_GET_REPORT             0x01
 #define USB_REQ_GET_IDLE               0x02
 #define USB_REQ_SET_IDLE               0x0A
 #define USB_REQ_SET_PROTOCOL           0x0B
 
-#define USB_TYPE_STANDARD              (0x00 << 5)
-#define USB_TYPE_CLASS                 (0x01 << 5)
-#define USB_TYPE_VENDOR                        (0x02 << 5)
-#define USB_TYPE_RESERVED              (0x03 << 5)
-
-#define USB_RECIP_DEVICE               0x00
-#define USB_RECIP_INTERFACE            0x01
-#define USB_RECIP_ENDPOINT             0x02
-#define USB_RECIP_OTHER                        0x03
-
-#define USB_HID_RPT_INPUT              0x01
-#define USB_HID_RPT_OUTPUT             0x02
-#define USB_HID_RPT_FEATURE            0x03
-
 /*
- * Request target types.
+ * /proc/bus/usb ioctl structs and codes
  */
-#define USB_RT_DEVICE                  0x00
-#define USB_RT_INTERFACE               0x01
-#define USB_RT_ENDPOINT                        0x02
-
-#define USB_RT_HUB                     (USB_TYPE_CLASS | USB_RECIP_DEVICE)
-#define USB_RT_PORT                    (USB_TYPE_CLASS | USB_RECIP_OTHER)
-
-#define USB_RT_HIDD                    (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
-
-/* /proc/bus/usb/xxx/yyy ioctl codes */
-
 struct usb_proc_ctrltransfer {
        __u8 requesttype;
        __u8 request;
@@ -227,9 +219,10 @@ typedef struct {
        __u16 length;
 } devrequest __attribute__ ((packed));
 
-/* USB-status codes:
+/*
+ * USB-status codes:
  * USB_ST* maps to -E* and should go away in the future
-*/
+ */
 
 #define USB_ST_NOERROR         0
 #define USB_ST_CRC             (-EILSEQ)
@@ -318,22 +311,6 @@ struct usb_endpoint_descriptor {
        int extralen;
 } __attribute__ ((packed));
 
-/* HID descriptor */
-struct usb_hid_class_descriptor {
-       __u8  bDescriptorType;
-       __u16 wDescriptorLength;
-} __attribute__ ((packed));
-
-struct usb_hid_descriptor {
-       __u8  bLength;
-       __u8  bDescriptorType;
-       __u16 bcdHID;
-       __u8  bCountryCode;
-       __u8  bNumDescriptors;
-
-       struct usb_hid_class_descriptor desc[1];
-} __attribute__ ((packed));
-
 /* Interface descriptor */
 struct usb_interface_descriptor {
        __u8  bLength;
@@ -782,7 +759,6 @@ int usb_clear_halt(struct usb_device *dev, int endp);
 void usb_show_device_descriptor(struct usb_device_descriptor *);
 void usb_show_config_descriptor(struct usb_config_descriptor *);
 void usb_show_interface_descriptor(struct usb_interface_descriptor *);
-void usb_show_hid_descriptor(struct usb_hid_descriptor * desc);
 void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *);
 void usb_show_device(struct usb_device *);
 void usb_show_string(struct usb_device *dev, char *id, int index);
index e8a9d8053c2c3f91b61ff165ad1c5e439a4fbbb7..885cdac77b716ce6d4102d662a0b068f5238c515 100644 (file)
@@ -288,7 +288,7 @@ static int pop_CB_reset(struct us_data *us)
        cmd[0] = SEND_DIAGNOSTIC;
        cmd[1] = 4;
        result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
-                                US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+                                US_CBI_ADSC, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                                 0, us->ifnum, cmd, sizeof(cmd), HZ*5);
 
        /* long wait for reset */
@@ -346,7 +346,7 @@ static int pop_CB_command(Scsi_Cmnd *srb)
                        } /* switch */
 
                        result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
-                                                US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+                                                US_CBI_ADSC, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                                                 0, us->ifnum,
                                                 cmd, us->fixedlength, HZ*5);
                        US_DEBUGP("First usb_control_msg returns %d\n", result);
@@ -367,7 +367,7 @@ static int pop_CB_command(Scsi_Cmnd *srb)
 
                                result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
                                                         US_CBI_ADSC, 
-                                                        USB_TYPE_CLASS | USB_RT_INTERFACE,
+                                                        USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                                                         0, us->ifnum,
                                                         cmd, us->fixedlength, HZ*5);
                                US_DEBUGP("Next usb_control_msg returns %d\n", result);
@@ -378,7 +378,7 @@ static int pop_CB_command(Scsi_Cmnd *srb)
                        }
                } else { /* !US_FL_FIXED_COMMAND */
                        result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
-                                                US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+                                                US_CBI_ADSC, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                                                 0, us->ifnum,
                                                 srb->cmnd, srb->cmd_len, HZ*5);
                }
@@ -411,7 +411,7 @@ static int pop_CB_status(Scsi_Cmnd *srb)
                while (retry--) {
                        result = usb_control_msg(us->pusb_dev, usb_rcvctrlpipe(us->pusb_dev,0),
                                                 USB_REQ_GET_STATUS, USB_DIR_IN |
-                                                USB_TYPE_STANDARD | USB_RT_DEVICE,
+                                                USB_TYPE_STANDARD | USB_RECIP_DEVICE,
                                                 0, us->ifnum, status, sizeof(status), HZ*5);
                        if (result != USB_ST_TIMEOUT)
                                break;
@@ -517,7 +517,7 @@ static int pop_Bulk_reset(struct us_data *us)
        int result;
 
        result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
-                                US_BULK_RESET, USB_TYPE_CLASS | USB_RT_INTERFACE,
+                                US_BULK_RESET, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
                                 US_BULK_RESET_HARD, us->ifnum,
                                 NULL, 0, HZ*5);
        if (result)
index c85ac5fec8ef77db2d9d54ce2119339a22c2e6e5..975b116ed51097b140074a4d1106c5df04f47d9f 100644 (file)
@@ -148,7 +148,7 @@ static void *usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
        kbd->dev.private = kbd;
        kbd->dev.event = usb_kbd_event;
 
-       kbd->dr.requesttype = USB_RT_HIDD;
+       kbd->dr.requesttype = USB_TYPE_CLASS | USB_RECIP_INTERFACE;
        kbd->dr.request = USB_REQ_SET_REPORT;
        kbd->dr.value = 0x200;
        kbd->dr.index = 1;
index e360cc70b08ba77d21431c656ed7b3a6cc3a5674..d7053e3370a526d7a0d5d106b72ba5f4913cc952 100644 (file)
  *      along with this program; if not, write to the Free Software
  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
+ * (01/16/2000) gkh
+ *     Fixed my intel hex processing tool, so now the firmware actually
+ *     matches the original file (this was causing a few problems...)
+ *
+ * (01/15/2000) gkh
+ *     Added debug loader firmware if DEBUG is #defined:
+ *             Port 1 LED flashes when the vend_ax program is running
+ *             Port 2 LED flashes when any SETUP command arrives
+ *             Port 3 LED flashes when any valid VENDOR request occurs
+ *             Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs
+ *
  * version 1.0 (01/09/2000) gkh
  *     Original firmware from ConnectTech massaged a little to be program
  *     readable.
@@ -33,1209 +44,1499 @@ struct whiteheat_hex_record {
 };
 
 static const struct whiteheat_hex_record whiteheat_firmware[] = {
-{ 0x0000,      3,      {0x02, 0x91, 0x00} },
-{ 0x0003,      3,      {0x02, 0x13, 0x00} },
-{ 0x000b,      3,      {0x02, 0x0a, 0x00} },
-{ 0x0033,      3,      {0x02, 0x07, 0x00} },
+{ 0x0000,      3,      {0x02, 0x91, 0xc9} },
+{ 0x0003,      3,      {0x02, 0x13, 0x12} },
+{ 0x000b,      3,      {0x02, 0x0a, 0x8d} },
+{ 0x0033,      3,      {0x02, 0x07, 0x84} },
 { 0x0043,      3,      {0x02, 0x09, 0x00} },
-{ 0x0053,      3,      {0x02, 0x0f, 0x00} },
-{ 0x005b,      3,      {0x02, 0x11, 0x00} },
-{ 0x0300,      16,     {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x03, 0x14, 0x70, 0x03, 0x02, 0x04, 0x77, 0x02} },
-{ 0x0310,      16,     {0xfe, 0x70, 0x03, 0x02, 0x04, 0xca, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x03, 0xf4, 0x14, 0x70, 0xf4} },
-{ 0x0320,      16,     {0x02, 0x03, 0xe2, 0x14, 0x70, 0x03, 0x02, 0x03, 0xca, 0x14, 0x70, 0x03, 0x02, 0x03, 0xd9, 0x02} },
+{ 0x0053,      3,      {0x02, 0x0f, 0x6e} },
+{ 0x005b,      3,      {0x02, 0x11, 0xb9} },
+{ 0x0300,      16,     {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x03, 0x14, 0x70, 0x03, 0x02, 0x04, 0x77, 0x24} },
+{ 0x0310,      16,     {0xfe, 0x70, 0x03, 0x02, 0x04, 0xca, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x03, 0xf4, 0x14, 0x70, 0x03} },
+{ 0x0320,      16,     {0x02, 0x03, 0xe2, 0x14, 0x70, 0x03, 0x02, 0x03, 0xca, 0x14, 0x70, 0x03, 0x02, 0x03, 0xd9, 0x24} },
 { 0x0330,      16,     {0x05, 0x60, 0x03, 0x02, 0x05, 0x19, 0x90, 0x7f, 0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60} },
-{ 0x0340,      16,     {0x36, 0x24, 0x02, 0x70, 0x7b, 0x74, 0x12, 0x90, 0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x00} },
-{ 0x0350,      16,     {0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x58, 0xea, 0x49, 0x60, 0xea} },
-{ 0x0360,      16,     {0xea, 0x90, 0x7f, 0xd4, 0xf0, 0xe9, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x20} },
-{ 0x0370,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x08, 0xa9, 0x12} },
-{ 0x0380,      16,     {0x49, 0x60, 0x33, 0x12, 0x9a, 0x48, 0xf5, 0x5e, 0x90, 0x7f, 0xee, 0xe0, 0xff, 0xe5, 0x5e, 0xff} },
-{ 0x0390,      16,     {0x9f, 0x40, 0x03, 0xe0, 0xf5, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x40, 0x40, 0x03, 0x75, 0x5e, 0x03} },
-{ 0x03a0,      16,     {0xae, 0x02, 0xaf, 0x01, 0x7c, 0x7f, 0x7d, 0x00, 0xab, 0x5e, 0x12, 0x1b, 0x0c, 0x90, 0x7f, 0x0c} },
-{ 0x03b0,      16,     {0xe5, 0x5e, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xf0} },
-{ 0x03c0,      16,     {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x00, 0xe5, 0x21, 0x00} },
-{ 0x03d0,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x21, 0xe0} },
-{ 0x03e0,      16,     {0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x31, 0xd2, 0x02, 0x43, 0x88, 0x10, 0xd2, 0xeb, 0x10} },
-{ 0x03f0,      16,     {0xa8, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x00, 0xe5, 0x31, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xb5} },
-{ 0x0400,      16,     {0x02, 0x05, 0x20, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x60} },
-{ 0x0410,      16,     {0x70, 0x5b, 0xa2, 0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x05, 0xe4, 0x33, 0x4f, 0xe4} },
-{ 0x0420,      16,     {0x7f, 0x00, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x02} },
-{ 0x0430,      16,     {0x90, 0x7f, 0x00, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x02} },
-{ 0x0440,      16,     {0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x54} },
-{ 0x0450,      16,     {0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0x01, 0x90, 0x7f, 0x01} },
-{ 0x0460,      16,     {0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x20} },
-{ 0x0470,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x1d, 0xfe} },
-{ 0x0480,      16,     {0x02, 0x60, 0x03, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x05, 0xc2, 0x00, 0x05} },
-{ 0x0490,      16,     {0x05, 0x20, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0x90} },
-{ 0x04a0,      16,     {0x70, 0x1f, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x0f} },
-{ 0x04b0,      16,     {0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x83} },
-{ 0x04c0,      16,     {0x5f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x56, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xe8} },
-{ 0x04d0,      16,     {0x60, 0x18, 0x24, 0x02, 0x70, 0x4a, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x04, 0xd2, 0x00, 0x04} },
-{ 0x04e0,      16,     {0x3f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x36, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0xea} },
-{ 0x04f0,      16,     {0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0xe0} },
-{ 0x0500,      16,     {0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x01} },
-{ 0x0510,      16,     {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xe0} },
-{ 0x0520,      7,      {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xe0} },
-{ 0x0527,      1,      {0x05} },
-{ 0x0528,      16,     {0x75, 0x5a, 0xff, 0x75, 0x59, 0xff, 0x75, 0x58, 0x0f, 0x75, 0x57, 0x00, 0xd2, 0x03, 0xc2, 0xd2} },
-{ 0x0538,      16,     {0xc2, 0x02, 0xc2, 0x00, 0xc2, 0x05, 0xc2, 0x01, 0x90, 0x02, 0x9e, 0x74, 0x19, 0xf0, 0xe4, 0x19} },
-{ 0x0548,      16,     {0x01, 0x5b, 0xf0, 0xc2, 0x04, 0x90, 0x01, 0x5e, 0xf0, 0xa3, 0xf0, 0xc2, 0xaf, 0xc2, 0xa8, 0xaf} },
-{ 0x0558,      16,     {0x0a, 0xfa, 0xe4, 0x90, 0x02, 0x4d, 0xf0, 0x90, 0x01, 0x00, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xf0} },
-{ 0x0568,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0x74} },
-{ 0x0578,      16,     {0x01, 0x7f, 0x00, 0x12, 0x19, 0xc1, 0x75, 0x5c, 0x12, 0x75, 0x5d, 0x0a, 0x90, 0x01, 0x0b, 0x90} },
-{ 0x0588,      16,     {0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0xf5} },
-{ 0x0598,      16,     {0xef, 0xf0, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x80, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x5d} },
-{ 0x05a8,      16,     {0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0d, 0xe0, 0xff, 0x0d} },
-{ 0x05b8,      16,     {0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0x8c} },
-{ 0x05c8,      16,     {0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x02} },
-{ 0x05d8,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x12, 0x0a, 0xe4, 0x93, 0xff, 0x74, 0x01, 0x93, 0x74} },
-{ 0x05e8,      16,     {0x01, 0x1c, 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0xff, 0xa3, 0xe0, 0xfe, 0xa3} },
-{ 0x05f8,      16,     {0x6e, 0xff, 0x90, 0x01, 0x1c, 0xf0, 0xa3, 0xe0, 0x6f, 0xff, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0x01} },
+{ 0x0340,      16,     {0x36, 0x24, 0x02, 0x70, 0x7b, 0x74, 0x12, 0x90, 0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0xd5} },
+{ 0x0350,      16,     {0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x58, 0xea, 0x49, 0x60, 0x0d} },
+{ 0x0360,      16,     {0xea, 0x90, 0x7f, 0xd4, 0xf0, 0xe9, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xb4} },
+{ 0x0370,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x08, 0xa9, 0xea} },
+{ 0x0380,      16,     {0x49, 0x60, 0x33, 0x12, 0x9a, 0x48, 0xf5, 0x5e, 0x90, 0x7f, 0xee, 0xe0, 0xff, 0xe5, 0x5e, 0xd3} },
+{ 0x0390,      16,     {0x9f, 0x40, 0x03, 0xe0, 0xf5, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x40, 0x40, 0x03, 0x75, 0x5e, 0x40} },
+{ 0x03a0,      16,     {0xae, 0x02, 0xaf, 0x01, 0x7c, 0x7f, 0x7d, 0x00, 0xab, 0x5e, 0x12, 0x1b, 0x0c, 0x90, 0x7f, 0xb5} },
+{ 0x03b0,      16,     {0xe5, 0x5e, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20} },
+{ 0x03c0,      16,     {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x00, 0xe5, 0x21, 0xf0} },
+{ 0x03d0,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x21, 0x02} },
+{ 0x03e0,      16,     {0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x31, 0xd2, 0x02, 0x43, 0x88, 0x10, 0xd2, 0xeb, 0xd2} },
+{ 0x03f0,      16,     {0xa8, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x00, 0xe5, 0x31, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0} },
+{ 0x0400,      16,     {0x02, 0x05, 0x20, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02} },
+{ 0x0410,      16,     {0x70, 0x5b, 0xa2, 0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x05, 0xe4, 0x33, 0x4f, 0x90} },
+{ 0x0420,      16,     {0x7f, 0x00, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0xe4} },
+{ 0x0430,      16,     {0x90, 0x7f, 0x00, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x90} },
+{ 0x0440,      16,     {0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25} },
+{ 0x0450,      16,     {0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0x01, 0x90, 0x7f, 0x00} },
+{ 0x0460,      16,     {0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xb4} },
+{ 0x0470,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x1d, 0x24} },
+{ 0x0480,      16,     {0x02, 0x60, 0x03, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x05, 0xc2, 0x00, 0x02} },
+{ 0x0490,      16,     {0x05, 0x20, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0} },
+{ 0x04a0,      16,     {0x70, 0x1f, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54} },
+{ 0x04b0,      16,     {0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x80} },
+{ 0x04c0,      16,     {0x5f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x56, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe} },
+{ 0x04d0,      16,     {0x60, 0x18, 0x24, 0x02, 0x70, 0x4a, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x04, 0xd2, 0x00, 0x80} },
+{ 0x04e0,      16,     {0x3f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x36, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0x20} },
+{ 0x04f0,      16,     {0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f} },
+{ 0x0500,      16,     {0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x10} },
+{ 0x0510,      16,     {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0} },
+{ 0x0520,      7,      {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0} },
+{ 0x0527,      1,      {0x22} },
+{ 0x0528,      16,     {0x75, 0x5a, 0xff, 0x75, 0x59, 0xff, 0x75, 0x58, 0x0f, 0x75, 0x57, 0x00, 0xd2, 0x03, 0xc2, 0x06} },
+{ 0x0538,      16,     {0xc2, 0x02, 0xc2, 0x00, 0xc2, 0x05, 0xc2, 0x01, 0x90, 0x02, 0x9e, 0x74, 0x19, 0xf0, 0xe4, 0x90} },
+{ 0x0548,      16,     {0x01, 0x5b, 0xf0, 0xc2, 0x04, 0x90, 0x01, 0x5e, 0xf0, 0xa3, 0xf0, 0xc2, 0xaf, 0xc2, 0xa8, 0x12} },
+{ 0x0558,      16,     {0x0a, 0xfa, 0xe4, 0x90, 0x02, 0x4d, 0xf0, 0x90, 0x01, 0x00, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
+{ 0x0568,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0x7e} },
+{ 0x0578,      16,     {0x01, 0x7f, 0x00, 0x12, 0x19, 0xc1, 0x75, 0x5c, 0x12, 0x75, 0x5d, 0x0a, 0x90, 0x01, 0x0b, 0xe0} },
+{ 0x0588,      16,     {0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83} },
+{ 0x0598,      16,     {0xef, 0xf0, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x80, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70} },
+{ 0x05a8,      16,     {0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0d, 0xe0, 0xff, 0x05} },
+{ 0x05b8,      16,     {0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0} },
+{ 0x05c8,      16,     {0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14} },
+{ 0x05d8,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x12, 0x0a, 0xe4, 0x93, 0xff, 0x74, 0x01, 0x93, 0x90} },
+{ 0x05e8,      16,     {0x01, 0x1c, 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0xff, 0xa3, 0xe0, 0xfe, 0xef} },
+{ 0x05f8,      16,     {0x6e, 0xff, 0x90, 0x01, 0x1c, 0xf0, 0xa3, 0xe0, 0x6f, 0xff, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0x6f} },
 { 0x0608,      16,     {0xf0, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0x75, 0x62, 0x10, 0x75, 0x63, 0x02, 0x75} },
-{ 0x0618,      16,     {0x64, 0x12, 0x75, 0x65, 0xac, 0x12, 0x8e, 0x35, 0x75, 0x5c, 0x12, 0x75, 0x5d, 0xb2, 0x90, 0x5d} },
-{ 0x0628,      16,     {0x0d, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x5c} },
-{ 0x0638,      16,     {0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x5d} },
-{ 0x0648,      16,     {0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0x92} },
-{ 0x0658,      16,     {0x54, 0x0f, 0x24, 0x41, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x02} },
-{ 0x0668,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x05, 0x5d, 0xe5, 0x5d, 0xae, 0x5c, 0x70, 0x02, 0x05, 0x70} },
-{ 0x0678,      16,     {0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x75, 0x82, 0x10, 0x75, 0x83, 0x01, 0xe0, 0xfc, 0x01} },
-{ 0x0688,      16,     {0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x90, 0x01, 0x18, 0x12, 0x9b, 0xfb, 0x7e, 0x9b} },
-{ 0x0698,      16,     {0x7f, 0x18, 0x12, 0x84, 0x61, 0x90, 0x01, 0x18, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfd} },
-{ 0x06a8,      16,     {0xa3, 0xe0, 0xff, 0x75, 0x62, 0x0a, 0x75, 0x63, 0x06, 0x75, 0x64, 0x12, 0x75, 0x65, 0xb8, 0x75} },
-{ 0x06b8,      16,     {0x8e, 0x35, 0xd2, 0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x53, 0x91, 0xf0} },
-{ 0x06c8,      16,     {0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0xe0, 0x44, 0x1f, 0xf0, 0xd2, 0x1f} },
-{ 0x06d8,      16,     {0x20, 0x01, 0x2e, 0x20, 0x01, 0x2b, 0xa2, 0x03, 0x92, 0x07, 0x12, 0x09, 0xa7, 0x75, 0x56, 0xa7} },
-{ 0x06e8,      16,     {0x75, 0x55, 0x6d, 0x75, 0x54, 0x33, 0x75, 0x53, 0x00, 0x20, 0x01, 0xe4, 0x7f, 0xff, 0x7e, 0x7f} },
-{ 0x06f8,      16,     {0x7d, 0xff, 0x7c, 0xff, 0x78, 0x53, 0x12, 0x9b, 0xe4, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0xd1, 0x4f} },
-{ 0x0708,      16,     {0xe8, 0x30, 0x01, 0x05, 0x12, 0x03, 0x00, 0xc2, 0x01, 0x30, 0x06, 0x0d, 0x12, 0x08, 0xfb, 0x12} },
-{ 0x0718,      16,     {0x06, 0x12, 0x0a, 0x00, 0x12, 0x09, 0xf4, 0xc2, 0x06, 0x12, 0x90, 0x58, 0x12, 0x98, 0x7d, 0x12} },
-{ 0x0728,      16,     {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x90, 0x01, 0xfe} },
-{ 0x0738,      16,     {0xe0, 0x5e, 0x60, 0x14, 0x74, 0x27, 0x2f, 0xf8, 0xe6, 0xd3, 0x94, 0x0a, 0x40, 0x04, 0x7e, 0x40} },
-{ 0x0748,      16,     {0x80, 0x02, 0x7e, 0x00, 0x8e, 0x5b, 0x80, 0x03, 0x75, 0x5b, 0x01, 0x74, 0x68, 0x2f, 0xf5, 0x68} },
-{ 0x0758,      16,     {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe5, 0x5b, 0xf0, 0x0f, 0xbf, 0x04, 0xc5, 0xe5, 0x2b, 0xd3, 0xe5} },
-{ 0x0768,      16,     {0x0a, 0x40, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x90, 0x20, 0x6c, 0xef, 0xf0, 0x90, 0xef} },
-{ 0x0778,      11,     {0x4d, 0xe0, 0x64, 0x0f, 0x70, 0x8b, 0x12, 0x93, 0x50, 0x80, 0x93} },
-{ 0x0783,      1,      {0x07} },
-{ 0x0784,      4,      {0x53, 0xd8, 0xef, 0x53} },
-{ 0x0788,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x74, 0x7f} },
-{ 0x0798,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x08, 0x92, 0x90, 0x08} },
-{ 0x07a8,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x02, 0x7d, 0x7f} },
-{ 0x07b8,      16,     {0x12, 0x11, 0x4b, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x96} },
-{ 0x07c8,      16,     {0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x90} },
-{ 0x07d8,      16,     {0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0x96} },
-{ 0x07e8,      16,     {0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x44} },
-{ 0x07f8,      7,      {0x32, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x12} },
-{ 0x07ff,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xfd, 0xf0, 0xe0, 0x44, 0x80, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x0a} },
-{ 0x080f,      16,     {0x08, 0x92, 0x7f, 0x02, 0xe4, 0xfd, 0x12, 0x11, 0x4b, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x00} },
-{ 0x081f,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x08} },
-{ 0x082f,      16,     {0x96, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x90} },
-{ 0x083f,      16,     {0x54, 0xf7, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x96} },
-{ 0x084f,      12,     {0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x12, 0x0a, 0x00, 0x12} },
-{ 0x085b,      16,     {0x90, 0x11, 0xef, 0xe4, 0x93, 0x70, 0x2f, 0x90, 0x7f, 0x93, 0x74, 0x30, 0xf0, 0x90, 0x7f, 0xf0} },
-{ 0x086b,      16,     {0x74, 0x3c, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0xc6, 0xf0, 0xe4, 0x90, 0x7f, 0x97, 0xf0, 0x90, 0x97} },
-{ 0x087b,      16,     {0x9d, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xe2, 0x74, 0x12, 0xf0, 0x12, 0x07, 0x88, 0x75, 0x82, 0x88} },
-{ 0x088b,      7,      {0x75, 0x83, 0x11, 0x74, 0xff, 0xf0, 0x74} },
-{ 0x0892,      16,     {0x8e, 0x6d, 0x8f, 0x6e, 0xe5, 0x6e, 0x15, 0x6e, 0xae, 0x6d, 0x70, 0x02, 0x15, 0x6d, 0x4e, 0x15} },
-{ 0x08a2,      7,      {0x05, 0x12, 0x08, 0xea, 0x80, 0xee, 0xea} },
-{ 0x08a9,      2,      {0x8f, 0xa9} },
-{ 0x08ab,      16,     {0xe4, 0xf5, 0x60, 0x75, 0x61, 0xff, 0x75, 0x62, 0x12, 0x75, 0x63, 0x6a, 0xab, 0x61, 0xaa, 0xab} },
-{ 0x08bb,      16,     {0xa9, 0x63, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0xb4, 0x03, 0x1d, 0xaf, 0x60, 0x05, 0x60, 0x60} },
-{ 0x08cb,      16,     {0xb5, 0x5f, 0x01, 0x22, 0x12, 0x9a, 0x48, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x3a} },
-{ 0x08db,      14,     {0x61, 0xff, 0xf5, 0x62, 0x89, 0x63, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} },
-{ 0x08e9,      1,      {0x08} },
-{ 0x08ea,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0x45} },
-{ 0x08fa,      1,      {0x08} },
-{ 0x08fb,      5,      {0x12, 0x07, 0xff, 0xd3, 0x07} },
-{ 0x0900,      16,     {0x02, 0x0b, 0x17, 0x00, 0x02, 0x0b, 0x4a, 0x00, 0x02, 0x0b, 0x2f, 0x00, 0x02, 0x0b, 0x89, 0x02} },
-{ 0x0910,      16,     {0x02, 0x0b, 0x73, 0x00, 0x02, 0x09, 0xf9, 0x00, 0x02, 0x09, 0xfa, 0x00, 0x02, 0x09, 0xfb, 0x02} },
-{ 0x0920,      16,     {0x02, 0x0b, 0xa4, 0x00, 0x02, 0x0c, 0x78, 0x00, 0x02, 0x0b, 0xd9, 0x00, 0x02, 0x0c, 0xc5, 0x02} },
-{ 0x0930,      16,     {0x02, 0x0c, 0x0e, 0x00, 0x02, 0x0d, 0x12, 0x00, 0x02, 0x0c, 0x43, 0x00, 0x02, 0x0d, 0x5f, 0x02} },
-{ 0x0940,      16,     {0x02, 0x09, 0xfc, 0x00, 0x02, 0x09, 0xfe, 0x00, 0x02, 0x09, 0xfd, 0x00, 0x02, 0x09, 0xff, 0x02} },
-{ 0x0950,      8,      {0x02, 0x0d, 0xac, 0x00, 0x02, 0x0d, 0xc2, 0x02} },
-{ 0x0958,      16,     {0xe4, 0xfe, 0x75, 0x61, 0xff, 0x75, 0x62, 0x12, 0x75, 0x63, 0x12, 0xab, 0x61, 0xaa, 0x62, 0x61} },
-{ 0x0968,      16,     {0x63, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0x06} },
-{ 0x0978,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x9a, 0xba, 0x85, 0xf0, 0x5f, 0xf5, 0x60, 0x62, 0xf5} },
-{ 0x0988,      16,     {0xe5, 0x5f, 0x62, 0x60, 0xe5, 0x60, 0x62, 0x5f, 0x29, 0xfd, 0xe5, 0x5f, 0x3a, 0xa9, 0x05, 0x3a} },
-{ 0x0998,      14,     {0x61, 0xff, 0xf5, 0x62, 0x89, 0x63, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} },
-{ 0x09a6,      1,      {0x09} },
-{ 0x09a7,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x07, 0x04, 0xe0, 0x07} },
-{ 0x09b7,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x08, 0x92, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xe0} },
-{ 0x09c7,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x44} },
-{ 0x09cc,      16,     {0x53, 0x8e, 0xf7, 0xe5, 0x89, 0x54, 0xf1, 0x44, 0x01, 0xf5, 0x89, 0x75, 0x8c, 0xb1, 0xd2, 0x8c} },
-{ 0x09dc,      16,     {0x75, 0x98, 0x40, 0x75, 0xcb, 0xff, 0x75, 0xca, 0xf3, 0x75, 0xc8, 0x34, 0xe4, 0xff, 0x7f, 0xe4} },
-{ 0x09ec,      7,      {0x78, 0x27, 0xe4, 0xf6, 0x08, 0xdf, 0xf6} },
-{ 0x09f3,      1,      {0x09} },
-{ 0x09f4,      5,      {0x12, 0x07, 0x88, 0xd3, 0x07} },
-{ 0x09f9,      1,      {0x09} },
-{ 0x09fa,      1,      {0x09} },
-{ 0x09fb,      1,      {0x09} },
-{ 0x09fc,      1,      {0x09} },
-{ 0x09fd,      1,      {0x09} },
-{ 0x09fe,      1,      {0x09} },
-{ 0x09ff,      1,      {0x09} },
-{ 0x0a00,      9,      {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x80} },
-{ 0x0a7d,      16,     {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} },
-{ 0x0a8d,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x06, 0x00} },
-{ 0x0a9d,      1,      {0x0a} },
-{ 0x0a9e,      16,     {0x30, 0x04, 0x16, 0x75, 0x8c, 0xf8, 0x75, 0x8a, 0x30, 0x7f, 0x2f, 0xae, 0x07, 0x1f, 0xee, 0x07} },
-{ 0x0aae,      16,     {0x3c, 0x90, 0x20, 0x00, 0x74, 0x55, 0xf0, 0x80, 0xf2, 0x75, 0x8c, 0xb1, 0x7f, 0x27, 0xef, 0x7f} },
-{ 0x0abe,      16,     {0x94, 0x2b, 0x50, 0x09, 0xa8, 0x07, 0xe6, 0x60, 0x01, 0x16, 0x0f, 0x80, 0xf1, 0x90, 0x02, 0xf1} },
-{ 0x0ace,      16,     {0xe0, 0x60, 0x02, 0x14, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x60, 0x0e, 0xe0} },
-{ 0x0ade,      13,     {0x01, 0x5f, 0xe0, 0x24, 0xff, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x34, 0xff, 0xe0} },
-{ 0x0aeb,      15,     {0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0afa,      16,     {0xd2, 0x00, 0x75, 0x8e, 0x10, 0xe4, 0x90, 0x7f, 0x92, 0xf0, 0x12, 0x0f, 0x72, 0x12, 0x08, 0x72} },
-{ 0x0b0a,      13,     {0x12, 0x0e, 0x0f, 0x12, 0x8f, 0x06, 0x12, 0x11, 0x9c, 0x12, 0x09, 0xcc, 0x12} },
-{ 0x0b17,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x7f} },
-{ 0x0b27,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0b2f,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x91} },
-{ 0x0b3f,      11,     {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0b4a,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0x74} },
-{ 0x0b5a,      16,     {0x7f, 0xd8, 0xe0, 0x70, 0x0d, 0x90, 0x7f, 0xd9, 0xe0, 0x70, 0x07, 0xe5, 0x2b, 0x70, 0x03, 0x2b} },
-{ 0x0b6a,      9,      {0x2b, 0x14, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0b73,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0x74} },
-{ 0x0b83,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0b89,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x30, 0x02, 0x02, 0xd2, 0x06, 0x53, 0x91, 0xef, 0x90, 0x91} },
-{ 0x0b99,      11,     {0xab, 0x74, 0x08, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0ba4,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x02, 0xf0, 0x74} },
-{ 0x0bb4,      16,     {0x30, 0x30, 0xe0, 0x13, 0xe5, 0x3b, 0x30, 0xe0, 0x07, 0x90, 0x20, 0x04, 0xe0, 0x44, 0x01, 0xe0} },
-{ 0x0bc4,      16,     {0x90, 0x20, 0x01, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} },
-{ 0x0bd4,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0bd9,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x74} },
-{ 0x0be9,      16,     {0x30, 0x30, 0xe1, 0x13, 0xe5, 0x3b, 0x30, 0xe1, 0x07, 0x90, 0x20, 0x0c, 0xe0, 0x44, 0x01, 0xe0} },
-{ 0x0bf9,      16,     {0x90, 0x20, 0x09, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} },
-{ 0x0c09,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0c0e,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x08, 0xf0, 0x74} },
-{ 0x0c1e,      16,     {0x30, 0x30, 0xe2, 0x13, 0xe5, 0x3b, 0x30, 0xe2, 0x07, 0x90, 0x20, 0x14, 0xe0, 0x44, 0x01, 0xe0} },
-{ 0x0c2e,      16,     {0x90, 0x20, 0x11, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} },
-{ 0x0c3e,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0c43,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x10, 0xf0, 0x74} },
-{ 0x0c53,      16,     {0x30, 0x30, 0xe3, 0x13, 0xe5, 0x3b, 0x30, 0xe3, 0x07, 0x90, 0x20, 0x1c, 0xe0, 0x44, 0x01, 0xe0} },
-{ 0x0c63,      16,     {0x90, 0x20, 0x19, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} },
-{ 0x0c73,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0c78,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} },
-{ 0x0c88,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x02, 0xf0, 0xe5, 0x30, 0x20, 0xe0, 0x06, 0x90, 0x7f, 0x06} },
-{ 0x0c98,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x90, 0x7f, 0xc7, 0xe0, 0x90, 0x02, 0x96, 0x90} },
-{ 0x0ca8,      16,     {0x80, 0x07, 0x90, 0x20, 0x01, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} },
-{ 0x0cb8,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0cc5,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} },
-{ 0x0cd5,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0xe5, 0x30, 0x20, 0xe1, 0x06, 0x90, 0x7f, 0x06} },
-{ 0x0ce5,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x90, 0x7f, 0xc9, 0xe0, 0x90, 0x02, 0x97, 0x90} },
-{ 0x0cf5,      16,     {0x80, 0x07, 0x90, 0x20, 0x09, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} },
-{ 0x0d05,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0d12,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} },
-{ 0x0d22,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x08, 0xf0, 0xe5, 0x30, 0x20, 0xe2, 0x06, 0x90, 0x7f, 0x06} },
-{ 0x0d32,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x90, 0x7f, 0xcb, 0xe0, 0x90, 0x02, 0x98, 0x90} },
-{ 0x0d42,      16,     {0x80, 0x07, 0x90, 0x20, 0x11, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} },
-{ 0x0d52,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0d5f,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} },
-{ 0x0d6f,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x10, 0xf0, 0xe5, 0x30, 0x20, 0xe3, 0x06, 0x90, 0x7f, 0x06} },
-{ 0x0d7f,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x90, 0x7f, 0xcd, 0xe0, 0x90, 0x02, 0x99, 0x90} },
-{ 0x0d8f,      16,     {0x80, 0x07, 0x90, 0x20, 0x19, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} },
-{ 0x0d9f,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0dac,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x80, 0xf0, 0x74} },
-{ 0x0dbc,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0dc2,      16,     {0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0x00} },
-{ 0x0dd2,      16,     {0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x53, 0x91, 0x07} },
-{ 0x0de2,      16,     {0x90, 0x7f, 0xaa, 0x74, 0x80, 0xf0, 0x7e, 0x7b, 0x7f, 0x40, 0x12, 0x8c, 0xfb, 0x90, 0x7f, 0xfb} },
-{ 0x0df2,      16,     {0xe4, 0xf0, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0xd0} },
-{ 0x0e02,      13,     {0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0xf0} },
-{ 0x0e0f,      16,     {0x90, 0x01, 0x20, 0x12, 0x9c, 0x07, 0x00, 0x00, 0x25, 0x80, 0x90, 0x01, 0x24, 0x74, 0x08, 0x24} },
-{ 0x0e1f,      16,     {0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x6e, 0xf0, 0xa3, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0xf0} },
-{ 0x0e2f,      16,     {0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0xc3} },
-{ 0x0e3f,      16,     {0x13, 0xef, 0x04, 0xa3, 0xf0, 0x7e, 0x01, 0x7f, 0x1f, 0x12, 0x84, 0xf4, 0x90, 0x01, 0x1e, 0x90} },
-{ 0x0e4f,      16,     {0x04, 0xf0, 0x80, 0xe3, 0xe4, 0xf5, 0x26, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0x01} },
-{ 0x0e5f,      16,     {0xc3, 0x94, 0x04, 0x50, 0x1a, 0x74, 0x96, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x02} },
-{ 0x0e6f,      16,     {0xf0, 0x74, 0x22, 0x2f, 0xf8, 0xe4, 0xf6, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xdc, 0xf0} },
-{ 0x0e7f,      16,     {0xf5, 0x30, 0xe5, 0xc0, 0x60, 0x2f, 0x90, 0x01, 0x1e, 0x74, 0x01, 0xf0, 0x90, 0x01, 0x1e, 0x90} },
-{ 0x0e8f,      16,     {0xff, 0xd3, 0x94, 0x04, 0x50, 0x1f, 0xef, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x07} },
-{ 0x0e9f,      16,     {0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x30, 0x7e, 0x01, 0x7f, 0x1e, 0x12, 0x82, 0xea, 0x90, 0x01, 0xea} },
-{ 0x0eaf,      16,     {0xe0, 0x04, 0xf0, 0x80, 0xd7, 0xe4, 0xf5, 0x3a, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0x90} },
-{ 0x0ebf,      16,     {0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xf5} },
-{ 0x0ecf,      16,     {0xf0, 0xfe, 0x74, 0x63, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xee, 0xf0, 0x74, 0xee} },
-{ 0x0edf,      16,     {0x2f, 0xf8, 0xa6, 0x06, 0x74, 0x32, 0x2f, 0xf8, 0xe4, 0xf6, 0x74, 0x2c, 0x2f, 0xf8, 0xe4, 0x2f} },
-{ 0x0eef,      16,     {0x74, 0x9a, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x01, 0x1e, 0x90} },
-{ 0x0eff,      16,     {0x04, 0xf0, 0xe0, 0xb4, 0x04, 0xb6, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0x5e, 0x60, 0xf5} },
-{ 0x0f0f,      16,     {0xe4, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0x50, 0xe7, 0x04} },
-{ 0x0f1f,      16,     {0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x55, 0x5e, 0x60, 0x38, 0x90, 0x60} },
-{ 0x0f2f,      1,      {0x0f} },
-{ 0x0f30,      16,     {0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0x20} },
-{ 0x0f40,      16,     {0xfe, 0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0x20} },
-{ 0x0f50,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xf5} },
-{ 0x0f60,      14,     {0x7d, 0x06, 0x12, 0x82, 0x60, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xa7, 0xf0} },
-{ 0x0f6e,      4,      {0x53, 0x91, 0xbf, 0x53} },
-{ 0x0f72,      16,     {0x7b, 0xff, 0x7a, 0x12, 0x79, 0x1b, 0x90, 0x00, 0x04, 0x12, 0x9a, 0x61, 0xfd, 0x8b, 0x60, 0xfd} },
-{ 0x0f82,      16,     {0x61, 0x12, 0x75, 0x62, 0x24, 0xe4, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x7f, 0xe0, 0xf0, 0xf5, 0xe0} },
-{ 0x0f92,      16,     {0xf5, 0x5f, 0x90, 0x02, 0x4c, 0xf0, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0xde} },
-{ 0x0fa2,      16,     {0xa9, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xaa, 0xf0, 0xe4, 0xfc, 0xec, 0x25, 0xe0, 0x24, 0xb4, 0xe0} },
-{ 0x0fb2,      16,     {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x0c, 0xbc, 0x10, 0xee, 0xe4, 0x90, 0x7f, 0xe4} },
-{ 0x0fc2,      16,     {0xf0, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03, 0x02, 0x11, 0x38, 0xab, 0x60, 0xaa, 0x61, 0xa9, 0xaa} },
-{ 0x0fd2,      16,     {0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0x64, 0x05, 0x60, 0x03, 0x02, 0x11, 0x27, 0x90, 0x00, 0x27} },
-{ 0x0fe2,      16,     {0x12, 0x9a, 0x61, 0x64, 0x01, 0x60, 0x03, 0x02, 0x10, 0xae, 0x90, 0x00, 0x02, 0x12, 0x9a, 0x02} },
-{ 0x0ff2,      16,     {0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50, 0x03, 0x02, 0x10, 0x88, 0xec, 0xc3, 0x94, 0xec} },
-{ 0x1002,      16,     {0x40, 0x03, 0x02, 0x10, 0x88, 0xef, 0x30, 0xe7, 0x42, 0xe5, 0x5f, 0xae, 0x5e, 0x78, 0x02, 0x5e} },
-{ 0x1012,      16,     {0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xf0, 0x2c, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xe4} },
-{ 0x1022,      16,     {0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe0, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01, 0xa8, 0x74} },
-{ 0x1032,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe0, 0xf0, 0x90, 0x02, 0x4c, 0x90} },
-{ 0x1042,      16,     {0x04, 0xf0, 0x90, 0x7f, 0xdd, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x3e, 0xe5, 0x5f, 0xae, 0x5e, 0x5f} },
-{ 0x1052,      16,     {0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xe8, 0x2c, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x1062,      16,     {0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe1, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0xf8} },
-{ 0x1072,      16,     {0xa8, 0x06, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0xe1} },
-{ 0x1082,      16,     {0x4c, 0xe0, 0x04, 0xf0, 0x80, 0x03, 0x7f, 0xff, 0x22, 0x90, 0x00, 0x04, 0x12, 0x9a, 0x61, 0x12} },
-{ 0x1092,      16,     {0x5f, 0xf5, 0x5f, 0xe4, 0x35, 0x5e, 0xf5, 0x5e, 0x90, 0x00, 0x05, 0x12, 0x9a, 0x61, 0xfe, 0x9a} },
-{ 0x10a2,      16,     {0x25, 0x5f, 0xf5, 0x5f, 0xee, 0x35, 0x5e, 0xf5, 0x5e, 0x02, 0x11, 0x2a, 0xab, 0x60, 0xaa, 0xab} },
-{ 0x10b2,      16,     {0xa9, 0x62, 0x90, 0x00, 0x03, 0x12, 0x9a, 0x61, 0xff, 0x64, 0x02, 0x60, 0x05, 0xef, 0x64, 0x05} },
-{ 0x10c2,      16,     {0x70, 0x60, 0x90, 0x00, 0x02, 0x12, 0x9a, 0x61, 0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0xd3} },
-{ 0x10d2,      16,     {0x4e, 0xef, 0x30, 0xe7, 0x1e, 0x90, 0x7f, 0xde, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0xa8} },
-{ 0x10e2,      16,     {0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f, 0xac, 0xe0, 0x7f} },
-{ 0x10f2,      16,     {0xf0, 0x80, 0x35, 0x90, 0x7f, 0xdf, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80, 0x02, 0x08} },
-{ 0x1102,      16,     {0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xad, 0xe0, 0x4e, 0xf0, 0xe0} },
-{ 0x1112,      16,     {0x25, 0xe0, 0x24, 0xc5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xec, 0xf0, 0x80, 0x09, 0xf0} },
-{ 0x1122,      16,     {0xff, 0x22, 0x7f, 0xff, 0x22, 0x7f, 0xff, 0x22, 0x74, 0x07, 0x25, 0x62, 0xf5, 0x62, 0xe4, 0xf5} },
-{ 0x1132,      16,     {0x61, 0xf5, 0x61, 0x02, 0x0f, 0xc3, 0x20, 0x03, 0x0d, 0x90, 0x02, 0x4c, 0xe0, 0x60, 0x07, 0xe0} },
-{ 0x1142,      8,      {0x7f, 0xae, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0x02} },
-{ 0x114a,      1,      {0x11} },
-{ 0x114b,      2,      {0xae, 0x4b} },
-{ 0x114d,      16,     {0x7c, 0x02, 0xec, 0x14, 0x60, 0x15, 0x14, 0x70, 0x1e, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xe0} },
-{ 0x115d,      16,     {0xee, 0x25, 0xe0, 0x44, 0x40, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x0c, 0x90, 0x7f, 0xa6, 0xed, 0x7f} },
-{ 0x116d,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xfb, 0x30, 0xe0, 0xf8, 0x30} },
-{ 0x117d,      16,     {0x02, 0x0a, 0x20, 0xe1, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22, 0xeb, 0x30, 0xe2, 0xeb} },
-{ 0x118d,      14,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xdc, 0xb6, 0x7f, 0xdc} },
-{ 0x119b,      1,      {0x11} },
-{ 0x119c,      16,     {0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x02, 0x7d, 0xff, 0x12, 0x11, 0x4b, 0x7f, 0x11} },
-{ 0x11ac,      13,     {0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x03, 0x7d, 0xff, 0x12, 0x11, 0x4b, 0x12} },
-{ 0x11b9,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc2, 0xa9, 0x90, 0x02, 0x9e, 0x74, 0x19, 0xf0, 0xd2, 0x19} },
-{ 0x11c9,      15,     {0x53, 0x91, 0x7f, 0x90, 0x01, 0x62, 0xe4, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x11d8,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x80} },
-{ 0x11e8,      7,      {0xd8, 0xfc, 0x42, 0x3a, 0x7f, 0x00, 0x3a} },
-{ 0x11ef,      3,      {0x00, 0x02, 0x00} },
-{ 0x1200,      16,     {0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0x10, 0x07, 0x01, 0x80, 0x42, 0x00, 0x01, 0x42} },
-{ 0x1210,      16,     {0x03, 0x01, 0x09, 0x02, 0x58, 0x00, 0x01, 0x01, 0x04, 0x80, 0x3c, 0x09, 0x04, 0x00, 0x00, 0x04} },
-{ 0x1220,      16,     {0xff, 0xff, 0xff, 0x05, 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x01, 0x02, 0x05} },
-{ 0x1230,      16,     {0x00, 0x00, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x02} },
-{ 0x1240,      16,     {0x07, 0x05, 0x83, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x03, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00} },
-{ 0x1250,      16,     {0x84, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x04, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x87, 0x07} },
-{ 0x1260,      16,     {0x40, 0x00, 0x00, 0x07, 0x05, 0x07, 0x02, 0x40, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x24, 0x09} },
-{ 0x1270,      16,     {0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x74} },
-{ 0x1280,      16,     {0x54, 0x00, 0x65, 0x00, 0x63, 0x00, 0x68, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x6e} },
-{ 0x1290,      16,     {0x2e, 0x00, 0x18, 0x03, 0x57, 0x00, 0x68, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x48, 0x65} },
-{ 0x12a0,      16,     {0x45, 0x00, 0x41, 0x00, 0x54, 0x00, 0x2d, 0x00, 0x34, 0x00, 0x1a, 0x03, 0x58, 0x00, 0x58, 0x58} },
-{ 0x12b0,      16,     {0x2d, 0x00, 0x58, 0x00, 0x58, 0x00, 0x2d, 0x00, 0x58, 0x00, 0x58, 0x00, 0x58, 0x00, 0x58, 0x58} },
-{ 0x12c0,      16,     {0x58, 0x00, 0x58, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x66} },
-{ 0x12d0,      16,     {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x6f} },
-{ 0x12e0,      16,     {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x67} },
-{ 0x12f0,      16,     {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x61} },
-{ 0x1300,      16,     {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x6e} },
-{ 0x1310,      2,      {0x00, 0x10} },
-{ 0x1312,      16,     {0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0xc0, 0xc0} },
-{ 0x1322,      16,     {0x75, 0x86, 0x00, 0x75, 0xd0, 0x18, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0xf0, 0x70, 0xf5} },
-{ 0x1332,      16,     {0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xd0} },
-{ 0x1342,      16,     {0x32, 0x75, 0x86, 0x00, 0x10, 0xf0, 0x0b, 0x10, 0xf1, 0x12, 0x10, 0xf2, 0x19, 0x10, 0xf3, 0x19} },
-{ 0x1352,      16,     {0x80, 0xd4, 0xe5, 0x27, 0x70, 0x03, 0x75, 0x27, 0x14, 0x02, 0x13, 0x7c, 0xe5, 0x28, 0x70, 0xe5} },
-{ 0x1362,      16,     {0x75, 0x28, 0x14, 0x02, 0x15, 0x0d, 0xe5, 0x29, 0x70, 0x03, 0x75, 0x29, 0x14, 0x02, 0x16, 0x14} },
-{ 0x1372,      16,     {0xe5, 0x2a, 0x70, 0x03, 0x75, 0x2a, 0x14, 0x02, 0x18, 0x2f, 0x90, 0x20, 0x02, 0xe0, 0x54, 0x02} },
-{ 0x1382,      16,     {0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14, 0x60, 0x09, 0x02, 0x60} },
-{ 0x1392,      16,     {0x43, 0x02, 0x14, 0x65, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5, 0x36, 0x02, 0x13, 0x36} },
-{ 0x13a2,      16,     {0x43, 0x82, 0x04, 0xe0, 0x43, 0x2c, 0x01, 0x02, 0x13, 0x43, 0x53, 0x82, 0xf8, 0x43, 0x82, 0xf8} },
-{ 0x13b2,      16,     {0xe0, 0x42, 0x32, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13, 0x43, 0x30, 0xe1, 0x43} },
-{ 0x13c2,      16,     {0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x53, 0x82, 0xf8, 0x43, 0x82, 0x04, 0x43} },
-{ 0x13d2,      16,     {0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74, 0x00, 0xf0, 0x90, 0x00} },
-{ 0x13e2,      16,     {0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x7f} },
-{ 0x13f2,      16,     {0x90, 0x7e, 0x80, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x05} },
+{ 0x0618,      16,     {0x64, 0x12, 0x75, 0x65, 0xac, 0x12, 0x8e, 0x35, 0x75, 0x5c, 0x12, 0x75, 0x5d, 0xb2, 0x90, 0x01} },
+{ 0x0628,      16,     {0x0d, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82} },
+{ 0x0638,      16,     {0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70} },
+{ 0x0648,      16,     {0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4} },
+{ 0x0658,      16,     {0x54, 0x0f, 0x24, 0x41, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14} },
+{ 0x0668,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x05, 0x5d, 0xe5, 0x5d, 0xae, 0x5c, 0x70, 0x02, 0x05, 0x5c} },
+{ 0x0678,      16,     {0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x75, 0x82, 0x10, 0x75, 0x83, 0x01, 0xe0, 0xfc, 0xa3} },
+{ 0x0688,      16,     {0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x90, 0x01, 0x18, 0x12, 0x9b, 0xfb, 0x7e, 0x01} },
+{ 0x0698,      16,     {0x7f, 0x18, 0x12, 0x84, 0x61, 0x90, 0x01, 0x18, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe} },
+{ 0x06a8,      16,     {0xa3, 0xe0, 0xff, 0x75, 0x62, 0x0a, 0x75, 0x63, 0x06, 0x75, 0x64, 0x12, 0x75, 0x65, 0xb8, 0x12} },
+{ 0x06b8,      16,     {0x8e, 0x35, 0xd2, 0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x53, 0x91, 0xef} },
+{ 0x06c8,      16,     {0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0xe0, 0x44, 0x1f, 0xf0, 0xd2, 0xaf} },
+{ 0x06d8,      16,     {0x20, 0x01, 0x2e, 0x20, 0x01, 0x2b, 0xa2, 0x03, 0x92, 0x07, 0x12, 0x09, 0xa7, 0x75, 0x56, 0x50} },
+{ 0x06e8,      16,     {0x75, 0x55, 0x6d, 0x75, 0x54, 0x33, 0x75, 0x53, 0x00, 0x20, 0x01, 0xe4, 0x7f, 0xff, 0x7e, 0xff} },
+{ 0x06f8,      16,     {0x7d, 0xff, 0x7c, 0xff, 0x78, 0x53, 0x12, 0x9b, 0xe4, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0xd1, 0x80} },
+{ 0x0708,      16,     {0xe8, 0x30, 0x01, 0x05, 0x12, 0x03, 0x00, 0xc2, 0x01, 0x30, 0x06, 0x0d, 0x12, 0x08, 0xfb, 0x50} },
+{ 0x0718,      16,     {0x06, 0x12, 0x0a, 0x00, 0x12, 0x09, 0xf4, 0xc2, 0x06, 0x12, 0x90, 0x58, 0x12, 0x98, 0x7d, 0xe4} },
+{ 0x0728,      16,     {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x90, 0x01, 0x5b} },
+{ 0x0738,      16,     {0xe0, 0x5e, 0x60, 0x14, 0x74, 0x27, 0x2f, 0xf8, 0xe6, 0xd3, 0x94, 0x0a, 0x40, 0x04, 0x7e, 0x01} },
+{ 0x0748,      16,     {0x80, 0x02, 0x7e, 0x00, 0x8e, 0x5b, 0x80, 0x03, 0x75, 0x5b, 0x01, 0x74, 0x68, 0x2f, 0xf5, 0x82} },
+{ 0x0758,      16,     {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe5, 0x5b, 0xf0, 0x0f, 0xbf, 0x04, 0xc5, 0xe5, 0x2b, 0xd3, 0x94} },
+{ 0x0768,      16,     {0x0a, 0x40, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x90, 0x20, 0x6c, 0xef, 0xf0, 0x90, 0x02} },
+{ 0x0778,      11,     {0x4d, 0xe0, 0x64, 0x0f, 0x70, 0x8b, 0x12, 0x93, 0x50, 0x80, 0x86} },
+{ 0x0783,      1,      {0x22} },
+{ 0x0784,      4,      {0x53, 0xd8, 0xef, 0x32} },
+{ 0x0788,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x74, 0x89} },
+{ 0x0798,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x08, 0x92, 0x90, 0x7f} },
+{ 0x07a8,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x02, 0x7d, 0xff} },
+{ 0x07b8,      16,     {0x12, 0x11, 0x4b, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02} },
+{ 0x07c8,      16,     {0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0} },
+{ 0x07d8,      16,     {0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf} },
+{ 0x07e8,      16,     {0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f} },
+{ 0x07f8,      7,      {0x32, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x22} },
+{ 0x07ff,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xfd, 0xf0, 0xe0, 0x44, 0x80, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12} },
+{ 0x080f,      16,     {0x08, 0x92, 0x7f, 0x02, 0xe4, 0xfd, 0x12, 0x11, 0x4b, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92} },
+{ 0x081f,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f} },
+{ 0x082f,      16,     {0x96, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0} },
+{ 0x083f,      16,     {0x54, 0xf7, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x01} },
+{ 0x084f,      12,     {0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x12, 0x0a, 0x00, 0x22} },
+{ 0x085b,      16,     {0x90, 0x11, 0xef, 0xe4, 0x93, 0x70, 0x2f, 0x90, 0x7f, 0x93, 0x74, 0x30, 0xf0, 0x90, 0x7f, 0x94} },
+{ 0x086b,      16,     {0x74, 0x3c, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0xc6, 0xf0, 0xe4, 0x90, 0x7f, 0x97, 0xf0, 0x90, 0x7f} },
+{ 0x087b,      16,     {0x9d, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xe2, 0x74, 0x12, 0xf0, 0x12, 0x07, 0x88, 0x75, 0x82, 0xef} },
+{ 0x088b,      7,      {0x75, 0x83, 0x11, 0x74, 0xff, 0xf0, 0x22} },
+{ 0x0892,      16,     {0x8e, 0x6d, 0x8f, 0x6e, 0xe5, 0x6e, 0x15, 0x6e, 0xae, 0x6d, 0x70, 0x02, 0x15, 0x6d, 0x4e, 0x60} },
+{ 0x08a2,      7,      {0x05, 0x12, 0x08, 0xea, 0x80, 0xee, 0x22} },
+{ 0x08a9,      2,      {0x8f, 0x5f} },
+{ 0x08ab,      16,     {0xe4, 0xf5, 0x60, 0x75, 0x61, 0xff, 0x75, 0x62, 0x12, 0x75, 0x63, 0x6a, 0xab, 0x61, 0xaa, 0x62} },
+{ 0x08bb,      16,     {0xa9, 0x63, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0xb4, 0x03, 0x1d, 0xaf, 0x60, 0x05, 0x60, 0xef} },
+{ 0x08cb,      16,     {0xb5, 0x5f, 0x01, 0x22, 0x12, 0x9a, 0x48, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x75} },
+{ 0x08db,      14,     {0x61, 0xff, 0xf5, 0x62, 0x89, 0x63, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x08e9,      1,      {0x22} },
+{ 0x08ea,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0xf9} },
+{ 0x08fa,      1,      {0x22} },
+{ 0x08fb,      5,      {0x12, 0x07, 0xff, 0xd3, 0x22} },
+{ 0x0900,      16,     {0x02, 0x0b, 0x17, 0x00, 0x02, 0x0b, 0x4a, 0x00, 0x02, 0x0b, 0x2f, 0x00, 0x02, 0x0b, 0x89, 0x00} },
+{ 0x0910,      16,     {0x02, 0x0b, 0x73, 0x00, 0x02, 0x09, 0xf9, 0x00, 0x02, 0x09, 0xfa, 0x00, 0x02, 0x09, 0xfb, 0x00} },
+{ 0x0920,      16,     {0x02, 0x0b, 0xa4, 0x00, 0x02, 0x0c, 0x78, 0x00, 0x02, 0x0b, 0xd9, 0x00, 0x02, 0x0c, 0xc5, 0x00} },
+{ 0x0930,      16,     {0x02, 0x0c, 0x0e, 0x00, 0x02, 0x0d, 0x12, 0x00, 0x02, 0x0c, 0x43, 0x00, 0x02, 0x0d, 0x5f, 0x00} },
+{ 0x0940,      16,     {0x02, 0x09, 0xfc, 0x00, 0x02, 0x09, 0xfe, 0x00, 0x02, 0x09, 0xfd, 0x00, 0x02, 0x09, 0xff, 0x00} },
+{ 0x0950,      8,      {0x02, 0x0d, 0xac, 0x00, 0x02, 0x0d, 0xc2, 0x00} },
+{ 0x0958,      16,     {0xe4, 0xfe, 0x75, 0x61, 0xff, 0x75, 0x62, 0x12, 0x75, 0x63, 0x12, 0xab, 0x61, 0xaa, 0x62, 0xa9} },
+{ 0x0968,      16,     {0x63, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0xb5} },
+{ 0x0978,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x9a, 0xba, 0x85, 0xf0, 0x5f, 0xf5, 0x60, 0x62, 0x5f} },
+{ 0x0988,      16,     {0xe5, 0x5f, 0x62, 0x60, 0xe5, 0x60, 0x62, 0x5f, 0x29, 0xfd, 0xe5, 0x5f, 0x3a, 0xa9, 0x05, 0x75} },
+{ 0x0998,      14,     {0x61, 0xff, 0xf5, 0x62, 0x89, 0x63, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x09a6,      1,      {0x22} },
+{ 0x09a7,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x07, 0x04, 0xe0, 0x44} },
+{ 0x09b7,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x08, 0x92, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xf0} },
+{ 0x09c7,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x22} },
+{ 0x09cc,      16,     {0x53, 0x8e, 0xf7, 0xe5, 0x89, 0x54, 0xf1, 0x44, 0x01, 0xf5, 0x89, 0x75, 0x8c, 0xb1, 0xd2, 0xa9} },
+{ 0x09dc,      16,     {0x75, 0x98, 0x40, 0x75, 0xcb, 0xff, 0x75, 0xca, 0xf3, 0x75, 0xc8, 0x34, 0xe4, 0xff, 0x7f, 0x05} },
+{ 0x09ec,      7,      {0x78, 0x27, 0xe4, 0xf6, 0x08, 0xdf, 0xfc} },
+{ 0x09f3,      1,      {0x22} },
+{ 0x09f4,      5,      {0x12, 0x07, 0x88, 0xd3, 0x22} },
+{ 0x09f9,      1,      {0x32} },
+{ 0x09fa,      1,      {0x32} },
+{ 0x09fb,      1,      {0x32} },
+{ 0x09fc,      1,      {0x32} },
+{ 0x09fd,      1,      {0x32} },
+{ 0x09fe,      1,      {0x32} },
+{ 0x09ff,      1,      {0x32} },
+{ 0x0a00,      9,      {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x74} },
+{ 0x0a7d,      16,     {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22} },
+{ 0x0a8d,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x06, 0xc0} },
+{ 0x0a9d,      1,      {0x07} },
+{ 0x0a9e,      16,     {0x30, 0x04, 0x16, 0x75, 0x8c, 0xf8, 0x75, 0x8a, 0x30, 0x7f, 0x2f, 0xae, 0x07, 0x1f, 0xee, 0x60} },
+{ 0x0aae,      16,     {0x3c, 0x90, 0x20, 0x00, 0x74, 0x55, 0xf0, 0x80, 0xf2, 0x75, 0x8c, 0xb1, 0x7f, 0x27, 0xef, 0xd3} },
+{ 0x0abe,      16,     {0x94, 0x2b, 0x50, 0x09, 0xa8, 0x07, 0xe6, 0x60, 0x01, 0x16, 0x0f, 0x80, 0xf1, 0x90, 0x02, 0x9e} },
+{ 0x0ace,      16,     {0xe0, 0x60, 0x02, 0x14, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x60, 0x0e, 0x90} },
+{ 0x0ade,      13,     {0x01, 0x5f, 0xe0, 0x24, 0xff, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x34, 0xff, 0xf0} },
+{ 0x0aeb,      15,     {0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0afa,      16,     {0xd2, 0x00, 0x75, 0x8e, 0x10, 0xe4, 0x90, 0x7f, 0x92, 0xf0, 0x12, 0x0f, 0x72, 0x12, 0x08, 0x5b} },
+{ 0x0b0a,      13,     {0x12, 0x0e, 0x0f, 0x12, 0x8f, 0x06, 0x12, 0x11, 0x9c, 0x12, 0x09, 0xcc, 0x22} },
+{ 0x0b17,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x01} },
+{ 0x0b27,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0b2f,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f} },
+{ 0x0b3f,      11,     {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0b4a,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0x90} },
+{ 0x0b5a,      16,     {0x7f, 0xd8, 0xe0, 0x70, 0x0d, 0x90, 0x7f, 0xd9, 0xe0, 0x70, 0x07, 0xe5, 0x2b, 0x70, 0x03, 0x75} },
+{ 0x0b6a,      9,      {0x2b, 0x14, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0b73,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0xd0} },
+{ 0x0b83,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0b89,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x30, 0x02, 0x02, 0xd2, 0x06, 0x53, 0x91, 0xef, 0x90, 0x7f} },
+{ 0x0b99,      11,     {0xab, 0x74, 0x08, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0ba4,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x02, 0xf0, 0xe5} },
+{ 0x0bb4,      16,     {0x30, 0x30, 0xe0, 0x13, 0xe5, 0x3b, 0x30, 0xe0, 0x07, 0x90, 0x20, 0x04, 0xe0, 0x44, 0x01, 0xf0} },
+{ 0x0bc4,      16,     {0x90, 0x20, 0x01, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x82} },
+{ 0x0bd4,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0bd9,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0xe5} },
+{ 0x0be9,      16,     {0x30, 0x30, 0xe1, 0x13, 0xe5, 0x3b, 0x30, 0xe1, 0x07, 0x90, 0x20, 0x0c, 0xe0, 0x44, 0x01, 0xf0} },
+{ 0x0bf9,      16,     {0x90, 0x20, 0x09, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x82} },
+{ 0x0c09,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0c0e,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x08, 0xf0, 0xe5} },
+{ 0x0c1e,      16,     {0x30, 0x30, 0xe2, 0x13, 0xe5, 0x3b, 0x30, 0xe2, 0x07, 0x90, 0x20, 0x14, 0xe0, 0x44, 0x01, 0xf0} },
+{ 0x0c2e,      16,     {0x90, 0x20, 0x11, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x82} },
+{ 0x0c3e,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0c43,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x10, 0xf0, 0xe5} },
+{ 0x0c53,      16,     {0x30, 0x30, 0xe3, 0x13, 0xe5, 0x3b, 0x30, 0xe3, 0x07, 0x90, 0x20, 0x1c, 0xe0, 0x44, 0x01, 0xf0} },
+{ 0x0c63,      16,     {0x90, 0x20, 0x19, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x82} },
+{ 0x0c73,      5,      {0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0c78,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x53} },
+{ 0x0c88,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x02, 0xf0, 0xe5, 0x30, 0x20, 0xe0, 0x06, 0x90, 0x7f, 0xc7} },
+{ 0x0c98,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x90, 0x7f, 0xc7, 0xe0, 0x90, 0x02, 0x96, 0xf0} },
+{ 0x0ca8,      16,     {0x80, 0x07, 0x90, 0x20, 0x01, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14} },
+{ 0x0cb8,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0cc5,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x53} },
+{ 0x0cd5,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0xe5, 0x30, 0x20, 0xe1, 0x06, 0x90, 0x7f, 0xc9} },
+{ 0x0ce5,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x90, 0x7f, 0xc9, 0xe0, 0x90, 0x02, 0x97, 0xf0} },
+{ 0x0cf5,      16,     {0x80, 0x07, 0x90, 0x20, 0x09, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14} },
+{ 0x0d05,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d12,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x53} },
+{ 0x0d22,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x08, 0xf0, 0xe5, 0x30, 0x20, 0xe2, 0x06, 0x90, 0x7f, 0xcb} },
+{ 0x0d32,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x90, 0x7f, 0xcb, 0xe0, 0x90, 0x02, 0x98, 0xf0} },
+{ 0x0d42,      16,     {0x80, 0x07, 0x90, 0x20, 0x11, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14} },
+{ 0x0d52,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d5f,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x53} },
+{ 0x0d6f,      16,     {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x10, 0xf0, 0xe5, 0x30, 0x20, 0xe3, 0x06, 0x90, 0x7f, 0xcd} },
+{ 0x0d7f,      16,     {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x90, 0x7f, 0xcd, 0xe0, 0x90, 0x02, 0x99, 0xf0} },
+{ 0x0d8f,      16,     {0x80, 0x07, 0x90, 0x20, 0x19, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14} },
+{ 0x0d9f,      13,     {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dac,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x80, 0xf0, 0xd0} },
+{ 0x0dbc,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dc2,      16,     {0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0} },
+{ 0x0dd2,      16,     {0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x53, 0x91, 0xef} },
+{ 0x0de2,      16,     {0x90, 0x7f, 0xaa, 0x74, 0x80, 0xf0, 0x7e, 0x7b, 0x7f, 0x40, 0x12, 0x8c, 0xfb, 0x90, 0x7f, 0xd3} },
+{ 0x0df2,      16,     {0xe4, 0xf0, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01} },
+{ 0x0e02,      13,     {0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32} },
+{ 0x0e0f,      16,     {0x90, 0x01, 0x20, 0x12, 0x9c, 0x07, 0x00, 0x00, 0x25, 0x80, 0x90, 0x01, 0x24, 0x74, 0x08, 0xf0} },
+{ 0x0e1f,      16,     {0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x6e, 0xf0, 0xa3, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
+{ 0x0e2f,      16,     {0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0x50} },
+{ 0x0e3f,      16,     {0x13, 0xef, 0x04, 0xa3, 0xf0, 0x7e, 0x01, 0x7f, 0x1f, 0x12, 0x84, 0xf4, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0e4f,      16,     {0x04, 0xf0, 0x80, 0xe3, 0xe4, 0xf5, 0x26, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff} },
+{ 0x0e5f,      16,     {0xc3, 0x94, 0x04, 0x50, 0x1a, 0x74, 0x96, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4} },
+{ 0x0e6f,      16,     {0xf0, 0x74, 0x22, 0x2f, 0xf8, 0xe4, 0xf6, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xdc, 0xe4} },
+{ 0x0e7f,      16,     {0xf5, 0x30, 0xe5, 0xc0, 0x60, 0x2f, 0x90, 0x01, 0x1e, 0x74, 0x01, 0xf0, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0e8f,      16,     {0xff, 0xd3, 0x94, 0x04, 0x50, 0x1f, 0xef, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02} },
+{ 0x0e9f,      16,     {0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x30, 0x7e, 0x01, 0x7f, 0x1e, 0x12, 0x82, 0xea, 0x90, 0x01, 0x1e} },
+{ 0x0eaf,      16,     {0xe0, 0x04, 0xf0, 0x80, 0xd7, 0xe4, 0xf5, 0x3a, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0ebf,      16,     {0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x54} },
+{ 0x0ecf,      16,     {0xf0, 0xfe, 0x74, 0x63, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xee, 0xf0, 0x74, 0x36} },
+{ 0x0edf,      16,     {0x2f, 0xf8, 0xa6, 0x06, 0x74, 0x32, 0x2f, 0xf8, 0xe4, 0xf6, 0x74, 0x2c, 0x2f, 0xf8, 0xe4, 0xf6} },
+{ 0x0eef,      16,     {0x74, 0x9a, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0eff,      16,     {0x04, 0xf0, 0xe0, 0xb4, 0x04, 0xb6, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0x5e, 0x60, 0x5e} },
+{ 0x0f0f,      16,     {0xe4, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0x50, 0xe7, 0x74} },
+{ 0x0f1f,      16,     {0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x55, 0x5e, 0x60, 0x38, 0x90, 0x01} },
+{ 0x0f2f,      1,      {0x1e} },
+{ 0x0f30,      16,     {0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0} },
+{ 0x0f40,      16,     {0xfe, 0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0} },
+{ 0x0f50,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xfe} },
+{ 0x0f60,      14,     {0x7d, 0x06, 0x12, 0x82, 0x60, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xa7, 0x22} },
+{ 0x0f6e,      4,      {0x53, 0x91, 0xbf, 0x32} },
+{ 0x0f72,      16,     {0x7b, 0xff, 0x7a, 0x12, 0x79, 0x1b, 0x90, 0x00, 0x04, 0x12, 0x9a, 0x61, 0xfd, 0x8b, 0x60, 0x75} },
+{ 0x0f82,      16,     {0x61, 0x12, 0x75, 0x62, 0x24, 0xe4, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x7f, 0xe0, 0xf0, 0xf5, 0x5e} },
+{ 0x0f92,      16,     {0xf5, 0x5f, 0x90, 0x02, 0x4c, 0xf0, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f} },
+{ 0x0fa2,      16,     {0xa9, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xaa, 0xf0, 0xe4, 0xfc, 0xec, 0x25, 0xe0, 0x24, 0xb4, 0xf5} },
+{ 0x0fb2,      16,     {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x0c, 0xbc, 0x10, 0xee, 0xe4, 0x90, 0x7f, 0xdd} },
+{ 0x0fc2,      16,     {0xf0, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03, 0x02, 0x11, 0x38, 0xab, 0x60, 0xaa, 0x61, 0xa9, 0x62} },
+{ 0x0fd2,      16,     {0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0x64, 0x05, 0x60, 0x03, 0x02, 0x11, 0x27, 0x90, 0x00, 0x03} },
+{ 0x0fe2,      16,     {0x12, 0x9a, 0x61, 0x64, 0x01, 0x60, 0x03, 0x02, 0x10, 0xae, 0x90, 0x00, 0x02, 0x12, 0x9a, 0x61} },
+{ 0x0ff2,      16,     {0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50, 0x03, 0x02, 0x10, 0x88, 0xec, 0xc3, 0x94, 0x10} },
+{ 0x1002,      16,     {0x40, 0x03, 0x02, 0x10, 0x88, 0xef, 0x30, 0xe7, 0x42, 0xe5, 0x5f, 0xae, 0x5e, 0x78, 0x02, 0xce} },
+{ 0x1012,      16,     {0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xf0, 0x2c, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5} },
+{ 0x1022,      16,     {0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe0, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01, 0xa8, 0x06} },
+{ 0x1032,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe0, 0xf0, 0x90, 0x02, 0x4c, 0xe0} },
+{ 0x1042,      16,     {0x04, 0xf0, 0x90, 0x7f, 0xdd, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x3e, 0xe5, 0x5f, 0xae, 0x5e, 0x78} },
+{ 0x1052,      16,     {0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xe8, 0x2c, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x1062,      16,     {0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe1, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01} },
+{ 0x1072,      16,     {0xa8, 0x06, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x02} },
+{ 0x1082,      16,     {0x4c, 0xe0, 0x04, 0xf0, 0x80, 0x03, 0x7f, 0xff, 0x22, 0x90, 0x00, 0x04, 0x12, 0x9a, 0x61, 0x25} },
+{ 0x1092,      16,     {0x5f, 0xf5, 0x5f, 0xe4, 0x35, 0x5e, 0xf5, 0x5e, 0x90, 0x00, 0x05, 0x12, 0x9a, 0x61, 0xfe, 0xe4} },
+{ 0x10a2,      16,     {0x25, 0x5f, 0xf5, 0x5f, 0xee, 0x35, 0x5e, 0xf5, 0x5e, 0x02, 0x11, 0x2a, 0xab, 0x60, 0xaa, 0x61} },
+{ 0x10b2,      16,     {0xa9, 0x62, 0x90, 0x00, 0x03, 0x12, 0x9a, 0x61, 0xff, 0x64, 0x02, 0x60, 0x05, 0xef, 0x64, 0x03} },
+{ 0x10c2,      16,     {0x70, 0x60, 0x90, 0x00, 0x02, 0x12, 0x9a, 0x61, 0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50} },
+{ 0x10d2,      16,     {0x4e, 0xef, 0x30, 0xe7, 0x1e, 0x90, 0x7f, 0xde, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80} },
+{ 0x10e2,      16,     {0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f, 0xac, 0xe0, 0x4e} },
+{ 0x10f2,      16,     {0xf0, 0x80, 0x35, 0x90, 0x7f, 0xdf, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80, 0x02, 0xc3} },
+{ 0x1102,      16,     {0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xad, 0xe0, 0x4e, 0xf0, 0xec} },
+{ 0x1112,      16,     {0x25, 0xe0, 0x24, 0xc5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xec, 0xf0, 0x80, 0x09, 0x7f} },
+{ 0x1122,      16,     {0xff, 0x22, 0x7f, 0xff, 0x22, 0x7f, 0xff, 0x22, 0x74, 0x07, 0x25, 0x62, 0xf5, 0x62, 0xe4, 0x35} },
+{ 0x1132,      16,     {0x61, 0xf5, 0x61, 0x02, 0x0f, 0xc3, 0x20, 0x03, 0x0d, 0x90, 0x02, 0x4c, 0xe0, 0x60, 0x07, 0x90} },
+{ 0x1142,      8,      {0x7f, 0xae, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0x00} },
+{ 0x114a,      1,      {0x22} },
+{ 0x114b,      2,      {0xae, 0x07} },
+{ 0x114d,      16,     {0x7c, 0x02, 0xec, 0x14, 0x60, 0x15, 0x14, 0x70, 0x1e, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0} },
+{ 0x115d,      16,     {0xee, 0x25, 0xe0, 0x44, 0x40, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x0c, 0x90, 0x7f, 0xa6, 0xed, 0xf0} },
+{ 0x116d,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xfb, 0x30, 0xe0, 0xf8, 0xbc} },
+{ 0x117d,      16,     {0x02, 0x0a, 0x20, 0xe1, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22, 0xeb, 0x30, 0xe2, 0x0a} },
+{ 0x118d,      14,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xdc, 0xb6, 0x7f, 0x08} },
+{ 0x119b,      1,      {0x22} },
+{ 0x119c,      16,     {0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x02, 0x7d, 0xff, 0x12, 0x11, 0x4b, 0x7f, 0x05} },
+{ 0x11ac,      13,     {0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x03, 0x7d, 0xff, 0x12, 0x11, 0x4b, 0x22} },
+{ 0x11b9,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc2, 0xa9, 0x90, 0x02, 0x9e, 0x74, 0x19, 0xf0, 0xd2, 0xa9} },
+{ 0x11c9,      15,     {0x53, 0x91, 0x7f, 0x90, 0x01, 0x62, 0xe4, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x11d8,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33} },
+{ 0x11e8,      7,      {0xd8, 0xfc, 0x42, 0x3a, 0x7f, 0x00, 0x22} },
+{ 0x11ef,      3,      {0x00, 0x02, 0x28} },
+{ 0x1200,      16,     {0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0x10, 0x07, 0x01, 0x80, 0x42, 0x00, 0x01, 0x02} },
+{ 0x1210,      16,     {0x03, 0x01, 0x09, 0x02, 0x58, 0x00, 0x01, 0x01, 0x04, 0x80, 0x3c, 0x09, 0x04, 0x00, 0x00, 0x0a} },
+{ 0x1220,      16,     {0xff, 0xff, 0xff, 0x05, 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x01, 0x02, 0x40} },
+{ 0x1230,      16,     {0x00, 0x00, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00} },
+{ 0x1240,      16,     {0x07, 0x05, 0x83, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x03, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05} },
+{ 0x1250,      16,     {0x84, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x04, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x87, 0x02} },
+{ 0x1260,      16,     {0x40, 0x00, 0x00, 0x07, 0x05, 0x07, 0x02, 0x40, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x24, 0x03} },
+{ 0x1270,      16,     {0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x00} },
+{ 0x1280,      16,     {0x54, 0x00, 0x65, 0x00, 0x63, 0x00, 0x68, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00} },
+{ 0x1290,      16,     {0x2e, 0x00, 0x18, 0x03, 0x57, 0x00, 0x68, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x48, 0x00} },
+{ 0x12a0,      16,     {0x45, 0x00, 0x41, 0x00, 0x54, 0x00, 0x2d, 0x00, 0x34, 0x00, 0x1a, 0x03, 0x58, 0x00, 0x58, 0x00} },
+{ 0x12b0,      16,     {0x2d, 0x00, 0x58, 0x00, 0x58, 0x00, 0x2d, 0x00, 0x58, 0x00, 0x58, 0x00, 0x58, 0x00, 0x58, 0x00} },
+{ 0x12c0,      16,     {0x58, 0x00, 0x58, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x00} },
+{ 0x12d0,      16,     {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00} },
+{ 0x12e0,      16,     {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x03} },
+{ 0x12f0,      16,     {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x00} },
+{ 0x1300,      16,     {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00} },
+{ 0x1310,      2,      {0x00, 0x00} },
+{ 0x1312,      16,     {0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0xc0, 0xd0} },
+{ 0x1322,      16,     {0x75, 0x86, 0x00, 0x75, 0xd0, 0x18, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0xf0, 0x70, 0x11} },
+{ 0x1332,      16,     {0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0} },
+{ 0x1342,      16,     {0x32, 0x75, 0x86, 0x00, 0x10, 0xf0, 0x0b, 0x10, 0xf1, 0x12, 0x10, 0xf2, 0x19, 0x10, 0xf3, 0x20} },
+{ 0x1352,      16,     {0x80, 0xd4, 0xe5, 0x27, 0x70, 0x03, 0x75, 0x27, 0x14, 0x02, 0x13, 0x7c, 0xe5, 0x28, 0x70, 0x03} },
+{ 0x1362,      16,     {0x75, 0x28, 0x14, 0x02, 0x15, 0x0d, 0xe5, 0x29, 0x70, 0x03, 0x75, 0x29, 0x14, 0x02, 0x16, 0x9e} },
+{ 0x1372,      16,     {0xe5, 0x2a, 0x70, 0x03, 0x75, 0x2a, 0x14, 0x02, 0x18, 0x2f, 0x90, 0x20, 0x02, 0xe0, 0x54, 0x3f} },
+{ 0x1382,      16,     {0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14, 0x60, 0x09, 0x02, 0x13} },
+{ 0x1392,      16,     {0x43, 0x02, 0x14, 0x65, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5, 0x36, 0x02, 0x13, 0x43} },
+{ 0x13a2,      16,     {0x43, 0x82, 0x04, 0xe0, 0x43, 0x2c, 0x01, 0x02, 0x13, 0x43, 0x53, 0x82, 0xf8, 0x43, 0x82, 0x05} },
+{ 0x13b2,      16,     {0xe0, 0x42, 0x32, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13, 0x43, 0x30, 0xe1, 0x02} },
+{ 0x13c2,      16,     {0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x53, 0x82, 0xf8, 0x43, 0x82, 0x04, 0xe0} },
+{ 0x13d2,      16,     {0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74, 0x00, 0xf0, 0x90, 0x20} },
+{ 0x13e2,      16,     {0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86} },
+{ 0x13f2,      16,     {0x90, 0x7e, 0x80, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f} },
 { 0x1402,      16,     {0xe5, 0xe5, 0x3c, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0} },
-{ 0x1412,      16,     {0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x74} },
-{ 0x1422,      16,     {0x7f, 0xb7, 0xed, 0xf0, 0x90, 0x20, 0x01, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x7f, 0x13} },
-{ 0x1432,      16,     {0x90, 0x7e, 0x80, 0x05, 0x86, 0x90, 0x20, 0x00, 0xe5, 0x84, 0xfe, 0x24, 0x05, 0xfd, 0x8d, 0x05} },
-{ 0x1442,      16,     {0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xdf, 0xef, 0x86} },
-{ 0x1452,      16,     {0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xb7, 0xf0, 0x05, 0x86, 0xa3, 0xe0, 0x54, 0xfe, 0xe0} },
-{ 0x1462,      16,     {0x02, 0x13, 0x43, 0x53, 0x2c, 0xfa, 0xe5, 0x22, 0x60, 0x08, 0x75, 0x22, 0x00, 0xd2, 0xe7, 0x00} },
-{ 0x1472,      16,     {0x80, 0x0a, 0x90, 0x7f, 0xc7, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x14, 0xff, 0x90, 0x20, 0x50, 0x90} },
-{ 0x1482,      16,     {0x00, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x44} },
-{ 0x1492,      16,     {0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7e, 0x40, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xa3} },
-{ 0x14a2,      16,     {0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0, 0x24, 0x38, 0xf0, 0x24} },
-{ 0x14b2,      16,     {0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60, 0x30, 0x03, 0x03, 0x30} },
+{ 0x1412,      16,     {0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x90} },
+{ 0x1422,      16,     {0x7f, 0xb7, 0xed, 0xf0, 0x90, 0x20, 0x01, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x7f, 0x40} },
+{ 0x1432,      16,     {0x90, 0x7e, 0x80, 0x05, 0x86, 0x90, 0x20, 0x00, 0xe5, 0x84, 0xfe, 0x24, 0x05, 0xfd, 0x8d, 0x84} },
+{ 0x1442,      16,     {0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xdf, 0xef, 0x05} },
+{ 0x1452,      16,     {0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xb7, 0xf0, 0x05, 0x86, 0xa3, 0xe0, 0x54, 0xfe, 0xf0} },
+{ 0x1462,      16,     {0x02, 0x13, 0x43, 0x53, 0x2c, 0xfa, 0xe5, 0x22, 0x60, 0x08, 0x75, 0x22, 0x00, 0xd2, 0xe7, 0xfe} },
+{ 0x1472,      16,     {0x80, 0x0a, 0x90, 0x7f, 0xc7, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x14, 0xff, 0x90, 0x20, 0x50, 0x74} },
+{ 0x1482,      16,     {0x00, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90} },
+{ 0x1492,      16,     {0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7e, 0x40, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0} },
+{ 0x14a2,      16,     {0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0, 0x24, 0x38, 0xf0, 0x05} },
+{ 0x14b2,      16,     {0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60, 0x30, 0x03, 0x03, 0x03} },
 { 0x14c2,      16,     {0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0} },
-{ 0x14d2,      16,     {0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11, 0x8b, 0x22, 0x90, 0x8b} },
-{ 0x14e2,      16,     {0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80, 0x1b, 0xe0, 0xde, 0x1b} },
-{ 0x14f2,      16,     {0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x90, 0x20, 0xf0} },
-{ 0x1502,      16,     {0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xc7, 0xf0, 0x02, 0x13, 0x43, 0x90, 0x20, 0x0a, 0xe0, 0x20} },
-{ 0x1512,      16,     {0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14, 0x60, 0x09, 0x14} },
-{ 0x1522,      16,     {0x13, 0x43, 0x02, 0x15, 0xf6, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5, 0x37, 0x02, 0xf5} },
+{ 0x14d2,      16,     {0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11, 0x8b, 0x22, 0x90, 0x7f} },
+{ 0x14e2,      16,     {0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80, 0x1b, 0xe0, 0xde, 0xfd} },
+{ 0x14f2,      16,     {0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x90, 0x20, 0x01} },
+{ 0x1502,      16,     {0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xc7, 0xf0, 0x02, 0x13, 0x43, 0x90, 0x20, 0x0a, 0xe0, 0x54} },
+{ 0x1512,      16,     {0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14, 0x60, 0x09, 0x02} },
+{ 0x1522,      16,     {0x13, 0x43, 0x02, 0x15, 0xf6, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5, 0x37, 0x02, 0x13} },
 { 0x1532,      16,     {0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2d, 0x01, 0x02, 0x13, 0x43, 0x53, 0x82, 0xf8, 0x43, 0x82} },
-{ 0x1542,      16,     {0x05, 0xe0, 0x42, 0x33, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13, 0x43, 0x30, 0x13} },
-{ 0x1552,      16,     {0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x53, 0x82, 0xf8, 0x43, 0x82, 0xf8} },
-{ 0x1562,      16,     {0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74, 0x01, 0xf0, 0x74} },
-{ 0x1572,      16,     {0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x90} },
-{ 0x1582,      16,     {0x86, 0x90, 0x7e, 0x00, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0xf0} },
+{ 0x1542,      16,     {0x05, 0xe0, 0x42, 0x33, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13, 0x43, 0x30, 0xe1} },
+{ 0x1552,      16,     {0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x53, 0x82, 0xf8, 0x43, 0x82, 0x04} },
+{ 0x1562,      16,     {0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74, 0x01, 0xf0, 0x90} },
+{ 0x1572,      16,     {0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05} },
+{ 0x1582,      16,     {0x86, 0x90, 0x7e, 0x00, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90} },
 { 0x1592,      16,     {0x7f, 0xe5, 0xe5, 0x3d, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0} },
-{ 0x15a2,      16,     {0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0x58} },
-{ 0x15b2,      16,     {0x90, 0x7f, 0xb9, 0xed, 0xf0, 0x90, 0x20, 0x09, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x02} },
-{ 0x15c2,      16,     {0x40, 0x90, 0x7e, 0x00, 0x05, 0x86, 0x90, 0x20, 0x08, 0xe5, 0x84, 0xfe, 0x24, 0x05, 0xfd, 0x24} },
-{ 0x15d2,      16,     {0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xdf, 0x05} },
-{ 0x15e2,      16,     {0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xb9, 0xf0, 0x05, 0x86, 0xa3, 0xe0, 0x54, 0xa3} },
-{ 0x15f2,      16,     {0xf0, 0x02, 0x13, 0x43, 0x53, 0x2d, 0xfa, 0xe5, 0x23, 0x60, 0x08, 0x75, 0x23, 0x00, 0xd2, 0x23} },
-{ 0x1602,      16,     {0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xc9, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x16, 0x90, 0x90, 0x20, 0x90} },
-{ 0x1612,      16,     {0x74, 0x01, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xe0} },
-{ 0x1622,      16,     {0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0xc0, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0xf0} },
-{ 0x1632,      16,     {0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0, 0x24, 0x38, 0xe0} },
-{ 0x1642,      16,     {0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60, 0x30, 0x03, 0x60} },
+{ 0x15a2,      16,     {0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0} },
+{ 0x15b2,      16,     {0x90, 0x7f, 0xb9, 0xed, 0xf0, 0x90, 0x20, 0x09, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x7f} },
+{ 0x15c2,      16,     {0x40, 0x90, 0x7e, 0x00, 0x05, 0x86, 0x90, 0x20, 0x08, 0xe5, 0x84, 0xfe, 0x24, 0x05, 0xfd, 0x8d} },
+{ 0x15d2,      16,     {0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xdf, 0xef} },
+{ 0x15e2,      16,     {0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xb9, 0xf0, 0x05, 0x86, 0xa3, 0xe0, 0x54, 0xfe} },
+{ 0x15f2,      16,     {0xf0, 0x02, 0x13, 0x43, 0x53, 0x2d, 0xfa, 0xe5, 0x23, 0x60, 0x08, 0x75, 0x23, 0x00, 0xd2, 0xe7} },
+{ 0x1602,      16,     {0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xc9, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x16, 0x90, 0x90, 0x20, 0x50} },
+{ 0x1612,      16,     {0x74, 0x01, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0} },
+{ 0x1622,      16,     {0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0xc0, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84} },
+{ 0x1632,      16,     {0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0, 0x24, 0x38, 0xf0} },
+{ 0x1642,      16,     {0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60, 0x30, 0x03, 0x03} },
 { 0x1652,      16,     {0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0} },
-{ 0x1662,      16,     {0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11, 0x8b, 0x23, 0x11} },
-{ 0x1672,      16,     {0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80, 0x1b, 0xe0, 0x80} },
-{ 0x1682,      14,     {0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0x58} },
-{ 0x1690,      16,     {0x90, 0x20, 0x09, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x02, 0x13, 0x43, 0x90, 0x13} },
-{ 0x16a0,      16,     {0x12, 0xe0, 0x54, 0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x0b} },
-{ 0x16b0,      16,     {0x60, 0x09, 0x02, 0x13, 0x43, 0x02, 0x17, 0x87, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x82} },
-{ 0x16c0,      16,     {0x38, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2e, 0x01, 0x02, 0x13, 0x43, 0x53, 0x13} },
-{ 0x16d0,      16,     {0xf8, 0x43, 0x82, 0x05, 0xe0, 0x42, 0x34, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0xfb} },
-{ 0x16e0,      16,     {0x43, 0x30, 0xe1, 0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x53, 0x82, 0x0a} },
-{ 0x16f0,      16,     {0x43, 0x82, 0x04, 0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x90} },
-{ 0x1700,      16,     {0x02, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x44} },
-{ 0x1710,      16,     {0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x80, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xa3} },
+{ 0x1662,      16,     {0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11, 0x8b, 0x23, 0x90} },
+{ 0x1672,      16,     {0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80, 0x1b, 0xe0, 0xde} },
+{ 0x1682,      14,     {0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0} },
+{ 0x1690,      16,     {0x90, 0x20, 0x09, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x02, 0x13, 0x43, 0x90, 0x20} },
+{ 0x16a0,      16,     {0x12, 0xe0, 0x54, 0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14} },
+{ 0x16b0,      16,     {0x60, 0x09, 0x02, 0x13, 0x43, 0x02, 0x17, 0x87, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5} },
+{ 0x16c0,      16,     {0x38, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2e, 0x01, 0x02, 0x13, 0x43, 0x53, 0x82} },
+{ 0x16d0,      16,     {0xf8, 0x43, 0x82, 0x05, 0xe0, 0x42, 0x34, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13} },
+{ 0x16e0,      16,     {0x43, 0x30, 0xe1, 0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x53, 0x82, 0xf8} },
+{ 0x16f0,      16,     {0x43, 0x82, 0x04, 0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74} },
+{ 0x1700,      16,     {0x02, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90} },
+{ 0x1710,      16,     {0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x80, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0} },
 { 0x1720,      16,     {0x05, 0x86, 0x90, 0x7f, 0xe5, 0xe5, 0x3e, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0} },
-{ 0x1730,      16,     {0xf0, 0xf0, 0xf0, 0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0xf0} },
-{ 0x1740,      16,     {0x74, 0x00, 0xf0, 0x90, 0x7f, 0xbb, 0xed, 0xf0, 0x90, 0x20, 0x11, 0xe0, 0x54, 0xfe, 0xf0, 0x54} },
-{ 0x1750,      16,     {0x13, 0x43, 0x7f, 0x40, 0x90, 0x7d, 0x80, 0x05, 0x86, 0x90, 0x20, 0x10, 0xe5, 0x84, 0xfe, 0xe5} },
-{ 0x1760,      16,     {0x05, 0xfd, 0x8d, 0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x86} },
-{ 0x1770,      16,     {0x86, 0xdf, 0xef, 0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xbb, 0xf0, 0x05, 0x86, 0xf0} },
-{ 0x1780,      16,     {0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x53, 0x2e, 0xfa, 0xe5, 0x24, 0x60, 0x08, 0x75, 0x60} },
-{ 0x1790,      16,     {0x00, 0xd2, 0xe7, 0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xcb, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x18, 0x03} },
-{ 0x17a0,      16,     {0x90, 0x20, 0x50, 0x74, 0x02, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0x90} },
-{ 0x17b0,      16,     {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x40, 0x05, 0x86, 0xe5, 0x85, 0x86} },
-{ 0x17c0,      16,     {0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0x08} },
-{ 0x17d0,      16,     {0x24, 0x38, 0xf0, 0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0xee} },
-{ 0x17e0,      16,     {0x30, 0x03, 0x03, 0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xfc} },
-{ 0x17f0,      16,     {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x64} },
-{ 0x1800,      16,     {0x8b, 0x24, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x74} },
-{ 0x1810,      16,     {0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x20} },
-{ 0x1820,      16,     {0xf0, 0x90, 0x20, 0x11, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcb, 0xf0, 0x02, 0x13, 0x43, 0x02} },
-{ 0x1830,      16,     {0x20, 0x1a, 0xe0, 0x54, 0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe4} },
-{ 0x1840,      16,     {0x14, 0x60, 0x09, 0x02, 0x13, 0x43, 0x02, 0x19, 0x18, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0x43} },
-{ 0x1850,      16,     {0xf5, 0x39, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2f, 0x01, 0x02, 0x13, 0x43, 0x02} },
-{ 0x1860,      16,     {0x82, 0xf8, 0x43, 0x82, 0x05, 0xe0, 0x42, 0x35, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x54} },
-{ 0x1870,      16,     {0x13, 0x43, 0x30, 0xe1, 0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x53, 0xe3} },
-{ 0x1880,      16,     {0xf8, 0x43, 0x82, 0x04, 0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x56} },
-{ 0x1890,      16,     {0x74, 0x03, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xe0} },
-{ 0x18a0,      16,     {0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x00, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0xf0} },
-{ 0x18b0,      16,     {0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xe5, 0x3f, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xfe} },
-{ 0x18c0,      16,     {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0xbf} },
-{ 0x18d0,      16,     {0x58, 0x74, 0x00, 0xf0, 0x90, 0x7f, 0xbd, 0xed, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfe, 0xe0} },
-{ 0x18e0,      16,     {0x02, 0x13, 0x43, 0x7f, 0x40, 0x90, 0x7d, 0x00, 0x05, 0x86, 0x90, 0x20, 0x18, 0xe5, 0x84, 0x18} },
-{ 0x18f0,      16,     {0x24, 0x05, 0xfd, 0x8d, 0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0x05} },
-{ 0x1900,      16,     {0x05, 0x86, 0xdf, 0xef, 0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xbd, 0xf0, 0x05, 0xbd} },
-{ 0x1910,      16,     {0xa3, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x53, 0x2f, 0xfa, 0xe5, 0x25, 0x60, 0x08, 0x25} },
-{ 0x1920,      16,     {0x25, 0x00, 0xd2, 0xe7, 0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xcd, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x70} },
-{ 0x1930,      16,     {0xb2, 0x90, 0x20, 0x50, 0x74, 0x03, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xf0} },
-{ 0x1940,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7c, 0xc0, 0x05, 0x86, 0xe5, 0x05} },
-{ 0x1950,      16,     {0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0xe7} },
-{ 0x1960,      16,     {0xe0, 0x24, 0x38, 0xf0, 0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0xfb} },
-{ 0x1970,      16,     {0x60, 0x30, 0x03, 0x03, 0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xfd} },
-{ 0x1980,      16,     {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0xec} },
-{ 0x1990,      16,     {0x11, 0x8b, 0x25, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0x58} },
-{ 0x19a0,      16,     {0x80, 0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x90} },
-{ 0x19b0,      16,     {0x00, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcd, 0xf0, 0x02, 0x13, 0xf0} },
-{ 0x19c0,      1,      {0x19} },
-{ 0x19c1,      4,      {0xad, 0x07, 0xac, 0xad} },
-{ 0x19c5,      16,     {0x79, 0x06, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xfa} },
-{ 0x19d5,      16,     {0x4a, 0x70, 0x03, 0x02, 0x1b, 0x09, 0xe9, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x1a, 0xdb, 0x02} },
+{ 0x1730,      16,     {0xf0, 0xf0, 0xf0, 0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58} },
+{ 0x1740,      16,     {0x74, 0x00, 0xf0, 0x90, 0x7f, 0xbb, 0xed, 0xf0, 0x90, 0x20, 0x11, 0xe0, 0x54, 0xfe, 0xf0, 0x02} },
+{ 0x1750,      16,     {0x13, 0x43, 0x7f, 0x40, 0x90, 0x7d, 0x80, 0x05, 0x86, 0x90, 0x20, 0x10, 0xe5, 0x84, 0xfe, 0x24} },
+{ 0x1760,      16,     {0x05, 0xfd, 0x8d, 0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05} },
+{ 0x1770,      16,     {0x86, 0xdf, 0xef, 0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xbb, 0xf0, 0x05, 0x86, 0xa3} },
+{ 0x1780,      16,     {0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x53, 0x2e, 0xfa, 0xe5, 0x24, 0x60, 0x08, 0x75, 0x24} },
+{ 0x1790,      16,     {0x00, 0xd2, 0xe7, 0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xcb, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x18, 0x21} },
+{ 0x17a0,      16,     {0x90, 0x20, 0x50, 0x74, 0x02, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0} },
+{ 0x17b0,      16,     {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x40, 0x05, 0x86, 0xe5, 0x85, 0xf0} },
+{ 0x17c0,      16,     {0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0} },
+{ 0x17d0,      16,     {0x24, 0x38, 0xf0, 0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60} },
+{ 0x17e0,      16,     {0x30, 0x03, 0x03, 0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xe0} },
+{ 0x17f0,      16,     {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11} },
+{ 0x1800,      16,     {0x8b, 0x24, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80} },
+{ 0x1810,      16,     {0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00} },
+{ 0x1820,      16,     {0xf0, 0x90, 0x20, 0x11, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcb, 0xf0, 0x02, 0x13, 0x43, 0x90} },
+{ 0x1830,      16,     {0x20, 0x1a, 0xe0, 0x54, 0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5} },
+{ 0x1840,      16,     {0x14, 0x60, 0x09, 0x02, 0x13, 0x43, 0x02, 0x19, 0x18, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0} },
+{ 0x1850,      16,     {0xf5, 0x39, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2f, 0x01, 0x02, 0x13, 0x43, 0x53} },
+{ 0x1860,      16,     {0x82, 0xf8, 0x43, 0x82, 0x05, 0xe0, 0x42, 0x35, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02} },
+{ 0x1870,      16,     {0x13, 0x43, 0x30, 0xe1, 0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x53, 0x82} },
+{ 0x1880,      16,     {0xf8, 0x43, 0x82, 0x04, 0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50} },
+{ 0x1890,      16,     {0x74, 0x03, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0} },
+{ 0x18a0,      16,     {0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x00, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84} },
+{ 0x18b0,      16,     {0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xe5, 0x3f, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0} },
+{ 0x18c0,      16,     {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20} },
+{ 0x18d0,      16,     {0x58, 0x74, 0x00, 0xf0, 0x90, 0x7f, 0xbd, 0xed, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfe, 0xf0} },
+{ 0x18e0,      16,     {0x02, 0x13, 0x43, 0x7f, 0x40, 0x90, 0x7d, 0x00, 0x05, 0x86, 0x90, 0x20, 0x18, 0xe5, 0x84, 0xfe} },
+{ 0x18f0,      16,     {0x24, 0x05, 0xfd, 0x8d, 0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3} },
+{ 0x1900,      16,     {0x05, 0x86, 0xdf, 0xef, 0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xbd, 0xf0, 0x05, 0x86} },
+{ 0x1910,      16,     {0xa3, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x53, 0x2f, 0xfa, 0xe5, 0x25, 0x60, 0x08, 0x75} },
+{ 0x1920,      16,     {0x25, 0x00, 0xd2, 0xe7, 0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xcd, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x19} },
+{ 0x1930,      16,     {0xb2, 0x90, 0x20, 0x50, 0x74, 0x03, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2} },
+{ 0x1940,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7c, 0xc0, 0x05, 0x86, 0xe5, 0x85} },
+{ 0x1950,      16,     {0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86} },
+{ 0x1960,      16,     {0xe0, 0x24, 0x38, 0xf0, 0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78} },
+{ 0x1970,      16,     {0x60, 0x30, 0x03, 0x03, 0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0} },
+{ 0x1980,      16,     {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70} },
+{ 0x1990,      16,     {0x11, 0x8b, 0x25, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0} },
+{ 0x19a0,      16,     {0x80, 0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74} },
+{ 0x19b0,      16,     {0x00, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcd, 0xf0, 0x02, 0x13, 0x43} },
+{ 0x19c0,      1,      {0x32} },
+{ 0x19c1,      4,      {0xad, 0x07, 0xac, 0x06} },
+{ 0x19c5,      16,     {0x79, 0x06, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb} },
+{ 0x19d5,      16,     {0x4a, 0x70, 0x03, 0x02, 0x1b, 0x09, 0xe9, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x1a, 0xdb, 0x90} },
 { 0x19e5,      16,     {0x19, 0xeb, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x1a, 0xb9, 0x02, 0x1a, 0x71, 0x02, 0x1a, 0x5a, 0x02} },
-{ 0x19f5,      16,     {0x1a, 0x40, 0x02, 0x1a, 0x2f, 0x02, 0x1a, 0x1a, 0x02, 0x1a, 0x00, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} },
-{ 0x1a05,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa0} },
-{ 0x1a15,      16,     {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x19, 0x8d, 0x82, 0x8c, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x94} },
-{ 0x1a25,      16,     {0xa3, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x02, 0x1a, 0xdb, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0x8c} },
-{ 0x1a35,      16,     {0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} },
-{ 0x1a45,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa1, 0x90, 0x7f, 0xa1} },
-{ 0x1a55,      16,     {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0xeb, 0x64, 0x01, 0x4a, 0x70, 0x08, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} },
-{ 0x1a65,      16,     {0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xf5, 0x69, 0x19, 0x80, 0x6a, 0xed, 0x24, 0x04, 0xed} },
-{ 0x1a75,      16,     {0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0x64, 0x02, 0x4e, 0x70, 0x08, 0x90, 0x70} },
-{ 0x1a85,      16,     {0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xff, 0xed, 0x24, 0x06, 0xf5, 0x24} },
-{ 0x1a95,      16,     {0xe4, 0x3c, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0xf0} },
-{ 0x1aa5,      16,     {0xef, 0xf0, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0xff} },
-{ 0x1ab5,      16,     {0x9a, 0x8e, 0x80, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0x7f} },
-{ 0x1ac5,      16,     {0xed, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xf5, 0x82, 0xe0} },
+{ 0x19f5,      16,     {0x1a, 0x40, 0x02, 0x1a, 0x2f, 0x02, 0x1a, 0x1a, 0x02, 0x1a, 0x00, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x1a05,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6} },
+{ 0x1a15,      16,     {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x19, 0x8d, 0x82, 0x8c, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x0a} },
+{ 0x1a25,      16,     {0xa3, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x02, 0x1a, 0xdb, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3} },
+{ 0x1a35,      16,     {0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x1a45,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa1, 0x90, 0x7f, 0xa6} },
+{ 0x1a55,      16,     {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0xeb, 0x64, 0x01, 0x4a, 0x70, 0x08, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x1a65,      16,     {0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xf5, 0x69, 0x19, 0x80, 0x6a, 0xed, 0x24, 0x04, 0xf5} },
+{ 0x1a75,      16,     {0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0x64, 0x02, 0x4e, 0x70, 0x08, 0x90, 0x7f} },
+{ 0x1a85,      16,     {0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xff, 0xed, 0x24, 0x06, 0xf5, 0x82} },
+{ 0x1a95,      16,     {0xe4, 0x3c, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83} },
+{ 0x1aa5,      16,     {0xef, 0xf0, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12} },
+{ 0x1ab5,      16,     {0x9a, 0x8e, 0x80, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xff} },
+{ 0x1ac5,      16,     {0xed, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xf5, 0x82, 0x8a} },
 { 0x1ad5,      16,     {0x83, 0xef, 0xf0, 0x7f, 0x08, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x69, 0x30, 0xe0, 0xf7, 0x30} },
 { 0x1ae5,      16,     {0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xe9, 0xd3, 0x94, 0x02, 0x50, 0x03, 0x02} },
-{ 0x1af5,      16,     {0x19, 0xc7, 0xe5, 0x69, 0x30, 0xe1, 0x03, 0x02, 0x19, 0xc7, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0xa5} },
-{ 0x1b05,      6,      {0xf0, 0x7f, 0x07, 0x22, 0x7f, 0x07} },
-{ 0x1b0b,      1,      {0x1b} },
+{ 0x1af5,      16,     {0x19, 0xc7, 0xe5, 0x69, 0x30, 0xe1, 0x03, 0x02, 0x19, 0xc7, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40} },
+{ 0x1b05,      6,      {0xf0, 0x7f, 0x07, 0x22, 0x7f, 0x08} },
+{ 0x1b0b,      1,      {0x22} },
 { 0x1b0c,      16,     {0x8e, 0x5f, 0x8f, 0x60, 0x8c, 0x61, 0x8d, 0x62, 0xaf, 0x03, 0x1b, 0xef, 0x60, 0x24, 0x05, 0x60} },
-{ 0x1b1c,      16,     {0xe5, 0x60, 0xae, 0x5f, 0x70, 0x02, 0x05, 0x5f, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x83} },
-{ 0x1b2c,      16,     {0x62, 0xe5, 0x62, 0xac, 0x61, 0x70, 0x02, 0x05, 0x61, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0x8c} },
-{ 0x1b3c,      3,      {0x80, 0xd6, 0x00} },
-{ 0x8000,      4,      {0x8e, 0x69, 0x8f, 0x8e} },
-{ 0x8004,      16,     {0x75, 0x6b, 0x03, 0xe5, 0x6a, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x69, 0xf5, 0x83, 0xe0, 0xf5} },
+{ 0x1b1c,      16,     {0xe5, 0x60, 0xae, 0x5f, 0x70, 0x02, 0x05, 0x5f, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05} },
+{ 0x1b2c,      16,     {0x62, 0xe5, 0x62, 0xac, 0x61, 0x70, 0x02, 0x05, 0x61, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0} },
+{ 0x1b3c,      3,      {0x80, 0xd6, 0x22} },
+{ 0x8000,      4,      {0x8e, 0x69, 0x8f, 0x6a} },
+{ 0x8004,      16,     {0x75, 0x6b, 0x03, 0xe5, 0x6a, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x69, 0xf5, 0x83, 0xe0, 0xfe} },
 { 0x8014,      16,     {0xa3, 0xe0, 0x4e, 0x70, 0x03, 0x02, 0x81, 0x0e, 0xe5, 0x6b, 0x60, 0x4e, 0x14, 0x60, 0x38, 0x14} },
-{ 0x8024,      16,     {0x60, 0x20, 0x14, 0x60, 0x03, 0x02, 0x80, 0xb2, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0x44} },
-{ 0x8034,      16,     {0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6, 0x90} },
-{ 0x8044,      16,     {0x80, 0x6c, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x09, 0xa3, 0x40} },
-{ 0x8054,      16,     {0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x57, 0x15, 0x6b, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0x85} },
-{ 0x8064,      16,     {0xa3, 0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x44, 0xe5, 0x6a, 0x24, 0x06, 0xf5, 0x24} },
-{ 0x8074,      16,     {0xe4, 0x35, 0x69, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0x85} },
-{ 0x8084,      16,     {0x83, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe5, 0x6a, 0xf0} },
-{ 0x8094,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x69, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x9a, 0x8e, 0x12} },
-{ 0x80a4,      16,     {0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xa3, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0x8e, 0x90, 0x9a} },
-{ 0x80b4,      16,     {0xa5, 0xe0, 0xf5, 0x6c, 0x30, 0xe0, 0xf7, 0x30, 0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x40} },
-{ 0x80c4,      16,     {0x22, 0xe5, 0x6c, 0x20, 0xe1, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0xf0} },
-{ 0x80d4,      16,     {0xe5, 0x6b, 0x70, 0x31, 0x7f, 0x01, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} },
-{ 0x80e4,      16,     {0x80, 0xf0, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0xe0} },
-{ 0x80f4,      16,     {0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x6c, 0x30, 0xe0, 0xf7, 0x30, 0xe1, 0xd5, 0x30} },
-{ 0x8104,      12,     {0x6b, 0x03, 0x02, 0x80, 0x07, 0x15, 0x6b, 0x02, 0x80, 0x07, 0x7f, 0x80} },
-{ 0x8110,      1,      {0x81} },
-{ 0x8111,      2,      {0xac, 0x11} },
-{ 0x8113,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xec, 0x25, 0xe0, 0x44, 0x41, 0x90, 0x7f, 0xa6, 0x90} },
-{ 0x8123,      16,     {0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x44} },
-{ 0x8133,      16,     {0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0xd4, 0x80, 0xf8, 0x90, 0x80} },
-{ 0x8143,      16,     {0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xdc, 0x20, 0xe1, 0x09, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0xf0} },
-{ 0x8153,      16,     {0xf9, 0x22, 0xed, 0x30, 0xe2, 0x0c, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0xf0} },
-{ 0x8163,      16,     {0xfa, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7b, 0xe0} },
-{ 0x8173,      16,     {0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xf0} },
-{ 0x8183,      16,     {0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0x86, 0x80, 0xf8, 0x90, 0x7f, 0xa5, 0x90} },
-{ 0x8193,      16,     {0xfd, 0x20, 0xe0, 0xdc, 0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x19, 0x90, 0x7f, 0xa5, 0x90} },
-{ 0x81a3,      16,     {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x1d} },
-{ 0x81b3,      16,     {0x02, 0x81, 0x13, 0x80, 0xf5, 0x90, 0x7f, 0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xd9, 0x30, 0xe2, 0xd9} },
-{ 0x81c3,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f, 0xfa, 0x22, 0xc2, 0xaf, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} },
-{ 0x81d3,      12,     {0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0xd2, 0xaf, 0xff, 0x7e, 0xaf} },
-{ 0x81df,      1,      {0x81} },
-{ 0x81e0,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xab} },
-{ 0x81f0,      16,     {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xf9, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0x83} },
-{ 0x8200,      16,     {0x44, 0x10, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x8b} },
-{ 0x8210,      16,     {0xa3, 0xf0, 0xed, 0x60, 0x29, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xc3, 0x80} },
-{ 0x8220,      16,     {0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4, 0xef, 0x55, 0x3b, 0x60, 0x0a, 0x8b, 0x82, 0x8a, 0x8b} },
-{ 0x8230,      16,     {0xa3, 0x74, 0x01, 0xf0, 0x80, 0x08, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0x74, 0xad, 0xf0, 0x8b, 0xad} },
-{ 0x8240,      16,     {0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0xa3} },
-{ 0x8250,      15,     {0xef, 0xf0, 0xae, 0x02, 0xaf, 0x03, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xe9, 0xa3} },
-{ 0x825f,      1,      {0x82} },
-{ 0x8260,      4,      {0x8f, 0x68, 0x8d, 0x8f} },
-{ 0x8264,      16,     {0xe4, 0xf5, 0x6a, 0x74, 0x3c, 0x2f, 0xf8, 0x76, 0x08, 0xe5, 0x68, 0x75, 0xf0, 0x0d, 0xa4, 0xf0} },
-{ 0x8274,      16,     {0xa0, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfd} },
-{ 0x8284,      16,     {0xa3, 0xe0, 0xff, 0x7b, 0x80, 0x7a, 0x25, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x12} },
-{ 0x8294,      16,     {0x3c, 0xe5, 0x68, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0xa0, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x34} },
-{ 0x82a4,      16,     {0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x96, 0x00} },
-{ 0x82b4,      16,     {0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x40, 0x0c, 0x75, 0x6a, 0x40, 0x74, 0x3c, 0x25, 0x68, 0xf8, 0x25} },
-{ 0x82c4,      16,     {0x10, 0x80, 0x0a, 0x75, 0x6a, 0x80, 0x74, 0x3c, 0x25, 0x68, 0xf8, 0x76, 0x38, 0xe5, 0x6a, 0x38} },
-{ 0x82d4,      16,     {0x69, 0x44, 0x01, 0xff, 0xe5, 0x68, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x82e4,      5,      {0x20, 0xf5, 0x83, 0xef, 0xf5} },
-{ 0x82e9,      1,      {0x82} },
-{ 0x82ea,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x5f, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x24} },
-{ 0x82fa,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xf5, 0x83, 0xe5, 0x82, 0x24, 0x04, 0x82} },
-{ 0x830a,      16,     {0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x44, 0x03, 0xf0, 0xaf, 0x5f, 0x7d, 0x06, 0x12, 0x7d} },
-{ 0x831a,      16,     {0x60, 0xaf, 0x5f, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0xa3, 0x61} },
-{ 0x832a,      16,     {0xe0, 0x20, 0xe0, 0x28, 0xe0, 0xf5, 0x60, 0xe5, 0x62, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x82} },
-{ 0x833a,      16,     {0xf5, 0x83, 0xe0, 0xf5, 0x60, 0xe5, 0x62, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x35} },
-{ 0x834a,      16,     {0xe0, 0xf5, 0x60, 0xaf, 0x5f, 0x7d, 0x06, 0x12, 0x82, 0x60, 0x80, 0xcc, 0x74, 0x96, 0x25, 0x74} },
-{ 0x835a,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x5f, 0x25, 0xe0, 0xff, 0xc3, 0xe0} },
-{ 0x836a,      16,     {0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x34} },
-{ 0x837a,      16,     {0xfe, 0xe5, 0x5f, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xee, 0xf5} },
-{ 0x838a,      16,     {0xa3, 0xef, 0xf0, 0xaf, 0x5f, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xc3} },
-{ 0x839a,      4,      {0x42, 0x30, 0x7f, 0x42} },
-{ 0x839e,      1,      {0x83} },
-{ 0x839f,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x47, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x24} },
-{ 0x83af,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x49, 0x8f, 0x4a, 0x74, 0x96, 0x25, 0x47, 0xf5, 0x82, 0x47} },
-{ 0x83bf,      16,     {0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x4a, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x49, 0xe4} },
-{ 0x83cf,      16,     {0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf, 0x47, 0xe4, 0xfd, 0x12, 0x81, 0xe0, 0xaf, 0x47, 0x7d, 0xaf} },
-{ 0x83df,      16,     {0x12, 0x82, 0x60, 0xe5, 0x4a, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x49, 0xf5, 0x83, 0xe0, 0xf5} },
-{ 0x83ef,      16,     {0xe0, 0x0b, 0x85, 0x4a, 0x82, 0x85, 0x49, 0x83, 0xe0, 0xf5, 0x48, 0x80, 0xe6, 0xaf, 0x47, 0xe6} },
-{ 0x83ff,      16,     {0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x30, 0xe5, 0x47, 0x30} },
-{ 0x840f,      13,     {0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x83} },
-{ 0x841c,      1,      {0x84} },
-{ 0x841d,      4,      {0x8e, 0x47, 0x8f, 0x8e} },
-{ 0x8421,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x49, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x24} },
-{ 0x8431,      16,     {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x70, 0x23, 0x85, 0x48, 0x82, 0x8e, 0x83, 0x82} },
-{ 0x8441,      16,     {0xe0, 0x30, 0xe0, 0x07, 0xaf, 0x49, 0x7d, 0x02, 0x12, 0x82, 0x60, 0x85, 0x48, 0x82, 0x85, 0x48} },
-{ 0x8451,      15,     {0x83, 0xa3, 0xe0, 0x30, 0xe1, 0x07, 0xaf, 0x49, 0x7d, 0x04, 0x12, 0x82, 0x60, 0x7f, 0x82} },
-{ 0x8460,      1,      {0x84} },
-{ 0x8461,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0xa3, 0xa3, 0xa3, 0xe0, 0xfc, 0xa3} },
-{ 0x8471,      16,     {0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xc0, 0x83, 0xa3} },
-{ 0x8481,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0x82} },
-{ 0x8491,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xa3, 0xa3, 0xa3, 0xe0, 0xfd, 0xec, 0x6d, 0xfd} },
-{ 0x84a1,      16,     {0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x82} },
-{ 0x84b1,      16,     {0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x83} },
-{ 0x84c1,      16,     {0x8e, 0x83, 0xa3, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0x8e} },
-{ 0x84d1,      16,     {0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xa3} },
-{ 0x84e1,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xff, 0xed, 0x6f, 0xd0, 0x82, 0x6f} },
-{ 0x84f1,      3,      {0x83, 0xf0, 0x00} },
-{ 0x84f4,      4,      {0x8e, 0x5f, 0x8f, 0x8e} },
-{ 0x84f8,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x8508,      16,     {0x1f, 0xad, 0x82, 0xf5, 0x66, 0x8d, 0x67, 0xaa, 0x5f, 0xa9, 0x60, 0x7b, 0x01, 0xc0, 0x03, 0x01} },
-{ 0x8518,      16,     {0x01, 0xef, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x92, 0xf9, 0x74, 0x02, 0x35, 0xf0, 0xa8, 0x01, 0xf0} },
-{ 0x8528,      16,     {0xad, 0x03, 0xd0, 0x01, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x0d, 0x12, 0x9a, 0x1f, 0x85, 0x60, 0x1f} },
-{ 0x8538,      16,     {0x85, 0x5f, 0x83, 0xa3, 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3} },
-{ 0x8548,      16,     {0x00, 0x7e, 0x08, 0x7d, 0x07, 0x7c, 0x00, 0x12, 0x9b, 0x2e, 0x8f, 0x64, 0x8e, 0x63, 0x8d, 0x8e} },
-{ 0x8558,      16,     {0x8c, 0x61, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x70, 0x9b} },
-{ 0x8568,      16,     {0x75, 0x64, 0x01, 0xf5, 0x63, 0xf5, 0x62, 0xf5, 0x61, 0x7f, 0xff, 0x7e, 0xff, 0x7d, 0x00, 0xff} },
-{ 0x8578,      16,     {0x00, 0xab, 0x64, 0xaa, 0x63, 0xa9, 0x62, 0xa8, 0x61, 0xd3, 0x12, 0x9b, 0xc0, 0x40, 0x0c, 0xc0} },
-{ 0x8588,      16,     {0x64, 0xff, 0x75, 0x63, 0xff, 0x75, 0x62, 0x00, 0x75, 0x61, 0x00, 0x85, 0x67, 0x82, 0x85, 0x67} },
-{ 0x8598,      16,     {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xe5, 0x66} },
-{ 0x85a8,      16,     {0xf0, 0xaf, 0x64, 0xae, 0x63, 0xad, 0x62, 0xac, 0x61, 0x78, 0x08, 0x12, 0x9b, 0xd1, 0x85, 0x9b} },
-{ 0x85b8,      16,     {0x82, 0x85, 0x66, 0x83, 0xa3, 0xef, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0x83} },
-{ 0x85c8,      16,     {0xe0, 0x54, 0x7f, 0xf0, 0xe4, 0xf5, 0x65, 0xe5, 0x60, 0x24, 0x08, 0xf5, 0x82, 0xe4, 0x35, 0x82} },
-{ 0x85d8,      16,     {0xf5, 0x83, 0xe0, 0xff, 0xb4, 0x62, 0x05, 0x43, 0x65, 0x0a, 0x80, 0x10, 0xef, 0xb4, 0x72, 0xef} },
-{ 0x85e8,      16,     {0x43, 0x65, 0x08, 0x80, 0x07, 0xef, 0xb4, 0x74, 0x03, 0x43, 0x65, 0x02, 0xe5, 0x60, 0x24, 0xe5} },
-{ 0x85f8,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0x30, 0xe3, 0x03, 0x43, 0x65, 0x80, 0x43} },
-{ 0x8608,      16,     {0x30, 0xe7, 0x12, 0x43, 0x65, 0x40, 0xe5, 0x67, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xe4} },
-{ 0x8618,      16,     {0x83, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x60, 0x24, 0x0b, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x35} },
-{ 0x8628,      16,     {0xe0, 0xff, 0x20, 0xe1, 0x03, 0x30, 0xe4, 0x27, 0x85, 0x60, 0x82, 0x85, 0x5f, 0x83, 0xe0, 0x5f} },
-{ 0x8638,      16,     {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x3b, 0xe5, 0x42} },
-{ 0x8648,      16,     {0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x17, 0xf0} },
-{ 0x8658,      16,     {0x60, 0x82, 0x85, 0x5f, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0x08} },
-{ 0x8668,      16,     {0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x3b, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3, 0xa3} },
+{ 0x8024,      16,     {0x60, 0x20, 0x14, 0x60, 0x03, 0x02, 0x80, 0xb2, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0x85} },
+{ 0x8034,      16,     {0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6, 0xf0} },
+{ 0x8044,      16,     {0x80, 0x6c, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x09, 0xa3, 0xa3} },
+{ 0x8054,      16,     {0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x57, 0x15, 0x6b, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3} },
+{ 0x8064,      16,     {0xa3, 0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x44, 0xe5, 0x6a, 0x24, 0x06, 0xf5, 0x82} },
+{ 0x8074,      16,     {0xe4, 0x35, 0x69, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5} },
+{ 0x8084,      16,     {0x83, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe5, 0x6a, 0x24} },
+{ 0x8094,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x69, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x9a, 0x8e, 0x85} },
+{ 0x80a4,      16,     {0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xa3, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0x8e, 0x90, 0x7f} },
+{ 0x80b4,      16,     {0xa5, 0xe0, 0xf5, 0x6c, 0x30, 0xe0, 0xf7, 0x30, 0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06} },
+{ 0x80c4,      16,     {0x22, 0xe5, 0x6c, 0x20, 0xe1, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22} },
+{ 0x80d4,      16,     {0xe5, 0x6b, 0x70, 0x31, 0x7f, 0x01, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x80e4,      16,     {0x80, 0xf0, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90} },
+{ 0x80f4,      16,     {0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x6c, 0x30, 0xe0, 0xf7, 0x30, 0xe1, 0xd5, 0x75} },
+{ 0x8104,      12,     {0x6b, 0x03, 0x02, 0x80, 0x07, 0x15, 0x6b, 0x02, 0x80, 0x07, 0x7f, 0x08} },
+{ 0x8110,      1,      {0x22} },
+{ 0x8111,      2,      {0xac, 0x07} },
+{ 0x8113,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xec, 0x25, 0xe0, 0x44, 0x41, 0x90, 0x7f, 0xa6, 0xf0} },
+{ 0x8123,      16,     {0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90} },
+{ 0x8133,      16,     {0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0xd4, 0x80, 0xf8, 0x90, 0x7f} },
+{ 0x8143,      16,     {0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xdc, 0x20, 0xe1, 0x09, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f} },
+{ 0x8153,      16,     {0xf9, 0x22, 0xed, 0x30, 0xe2, 0x0c, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f} },
+{ 0x8163,      16,     {0xfa, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7b, 0x1e} },
+{ 0x8173,      16,     {0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6} },
+{ 0x8183,      16,     {0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0x86, 0x80, 0xf8, 0x90, 0x7f, 0xa5, 0xe0} },
+{ 0x8193,      16,     {0xfd, 0x20, 0xe0, 0xdc, 0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x19, 0x90, 0x7f, 0xa5, 0xe0} },
+{ 0x81a3,      16,     {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03} },
+{ 0x81b3,      16,     {0x02, 0x81, 0x13, 0x80, 0xf5, 0x90, 0x7f, 0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xd9, 0x30, 0xe2, 0x09} },
+{ 0x81c3,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f, 0xfa, 0x22, 0xc2, 0xaf, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x81d3,      12,     {0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0xd2, 0xaf, 0xff, 0x7e, 0x00} },
+{ 0x81df,      1,      {0x22} },
+{ 0x81e0,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xf5} },
+{ 0x81f0,      16,     {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xf9, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0} },
+{ 0x8200,      16,     {0x44, 0x10, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x83} },
+{ 0x8210,      16,     {0xa3, 0xf0, 0xed, 0x60, 0x29, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xc3, 0x33} },
+{ 0x8220,      16,     {0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4, 0xef, 0x55, 0x3b, 0x60, 0x0a, 0x8b, 0x82, 0x8a, 0x83} },
+{ 0x8230,      16,     {0xa3, 0x74, 0x01, 0xf0, 0x80, 0x08, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0x74, 0xad, 0xf0, 0x8b, 0x82} },
+{ 0x8240,      16,     {0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0x54} },
+{ 0x8250,      15,     {0xef, 0xf0, 0xae, 0x02, 0xaf, 0x03, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xe9, 0xf0} },
+{ 0x825f,      1,      {0x22} },
+{ 0x8260,      4,      {0x8f, 0x68, 0x8d, 0x69} },
+{ 0x8264,      16,     {0xe4, 0xf5, 0x6a, 0x74, 0x3c, 0x2f, 0xf8, 0x76, 0x08, 0xe5, 0x68, 0x75, 0xf0, 0x0d, 0xa4, 0x24} },
+{ 0x8274,      16,     {0xa0, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe} },
+{ 0x8284,      16,     {0xa3, 0xe0, 0xff, 0x7b, 0x80, 0x7a, 0x25, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x50} },
+{ 0x8294,      16,     {0x3c, 0xe5, 0x68, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0xa0, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83} },
+{ 0x82a4,      16,     {0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x96, 0x78} },
+{ 0x82b4,      16,     {0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x40, 0x0c, 0x75, 0x6a, 0x40, 0x74, 0x3c, 0x25, 0x68, 0xf8, 0x76} },
+{ 0x82c4,      16,     {0x10, 0x80, 0x0a, 0x75, 0x6a, 0x80, 0x74, 0x3c, 0x25, 0x68, 0xf8, 0x76, 0x38, 0xe5, 0x6a, 0x45} },
+{ 0x82d4,      16,     {0x69, 0x44, 0x01, 0xff, 0xe5, 0x68, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x82e4,      5,      {0x20, 0xf5, 0x83, 0xef, 0xf0} },
+{ 0x82e9,      1,      {0x22} },
+{ 0x82ea,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x5f, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82} },
+{ 0x82fa,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xf5, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5} },
+{ 0x830a,      16,     {0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x44, 0x03, 0xf0, 0xaf, 0x5f, 0x7d, 0x06, 0x12, 0x82} },
+{ 0x831a,      16,     {0x60, 0xaf, 0x5f, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0xa3, 0xa3} },
+{ 0x832a,      16,     {0xe0, 0x20, 0xe0, 0x28, 0xe0, 0xf5, 0x60, 0xe5, 0x62, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x61} },
+{ 0x833a,      16,     {0xf5, 0x83, 0xe0, 0xf5, 0x60, 0xe5, 0x62, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83} },
+{ 0x834a,      16,     {0xe0, 0xf5, 0x60, 0xaf, 0x5f, 0x7d, 0x06, 0x12, 0x82, 0x60, 0x80, 0xcc, 0x74, 0x96, 0x25, 0x5f} },
+{ 0x835a,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x5f, 0x25, 0xe0, 0xff, 0xc3, 0x74} },
+{ 0x836a,      16,     {0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x82} },
+{ 0x837a,      16,     {0xfe, 0xe5, 0x5f, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xee, 0xf0} },
+{ 0x838a,      16,     {0xa3, 0xef, 0xf0, 0xaf, 0x5f, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc} },
+{ 0x839a,      4,      {0x42, 0x30, 0x7f, 0x00} },
+{ 0x839e,      1,      {0x22} },
+{ 0x839f,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x47, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82} },
+{ 0x83af,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x49, 0x8f, 0x4a, 0x74, 0x96, 0x25, 0x47, 0xf5, 0x82, 0xe4} },
+{ 0x83bf,      16,     {0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x4a, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x49, 0xf5} },
+{ 0x83cf,      16,     {0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf, 0x47, 0xe4, 0xfd, 0x12, 0x81, 0xe0, 0xaf, 0x47, 0x7d, 0x06} },
+{ 0x83df,      16,     {0x12, 0x82, 0x60, 0xe5, 0x4a, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x49, 0xf5, 0x83, 0xe0, 0x30} },
+{ 0x83ef,      16,     {0xe0, 0x0b, 0x85, 0x4a, 0x82, 0x85, 0x49, 0x83, 0xe0, 0xf5, 0x48, 0x80, 0xe6, 0xaf, 0x47, 0x74} },
+{ 0x83ff,      16,     {0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x30, 0xe5, 0x47, 0x25} },
+{ 0x840f,      13,     {0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0xff} },
+{ 0x841c,      1,      {0x22} },
+{ 0x841d,      4,      {0x8e, 0x47, 0x8f, 0x48} },
+{ 0x8421,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x49, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82} },
+{ 0x8431,      16,     {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x70, 0x23, 0x85, 0x48, 0x82, 0x8e, 0x83, 0xa3} },
+{ 0x8441,      16,     {0xe0, 0x30, 0xe0, 0x07, 0xaf, 0x49, 0x7d, 0x02, 0x12, 0x82, 0x60, 0x85, 0x48, 0x82, 0x85, 0x47} },
+{ 0x8451,      15,     {0x83, 0xa3, 0xe0, 0x30, 0xe1, 0x07, 0xaf, 0x49, 0x7d, 0x04, 0x12, 0x82, 0x60, 0x7f, 0x00} },
+{ 0x8460,      1,      {0x22} },
+{ 0x8461,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0xa3, 0xa3, 0xa3, 0xe0, 0xfc, 0xed} },
+{ 0x8471,      16,     {0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xc0, 0x83, 0xc0} },
+{ 0x8481,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0} },
+{ 0x8491,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xa3, 0xa3, 0xa3, 0xe0, 0xfd, 0xec, 0x6d, 0xd0} },
+{ 0x84a1,      16,     {0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f} },
+{ 0x84b1,      16,     {0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82} },
+{ 0x84c1,      16,     {0x8e, 0x83, 0xa3, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0} },
+{ 0x84d1,      16,     {0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0} },
+{ 0x84e1,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xff, 0xed, 0x6f, 0xd0, 0x82, 0xd0} },
+{ 0x84f1,      3,      {0x83, 0xf0, 0x22} },
+{ 0x84f4,      4,      {0x8e, 0x5f, 0x8f, 0x60} },
+{ 0x84f8,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x8508,      16,     {0x1f, 0xad, 0x82, 0xf5, 0x66, 0x8d, 0x67, 0xaa, 0x5f, 0xa9, 0x60, 0x7b, 0x01, 0xc0, 0x03, 0xc0} },
+{ 0x8518,      16,     {0x01, 0xef, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x92, 0xf9, 0x74, 0x02, 0x35, 0xf0, 0xa8, 0x01, 0xfc} },
+{ 0x8528,      16,     {0xad, 0x03, 0xd0, 0x01, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x0d, 0x12, 0x9a, 0x1f, 0x85, 0x60, 0x82} },
+{ 0x8538,      16,     {0x85, 0x5f, 0x83, 0xa3, 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0x7f} },
+{ 0x8548,      16,     {0x00, 0x7e, 0x08, 0x7d, 0x07, 0x7c, 0x00, 0x12, 0x9b, 0x2e, 0x8f, 0x64, 0x8e, 0x63, 0x8d, 0x62} },
+{ 0x8558,      16,     {0x8c, 0x61, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x70, 0x09} },
+{ 0x8568,      16,     {0x75, 0x64, 0x01, 0xf5, 0x63, 0xf5, 0x62, 0xf5, 0x61, 0x7f, 0xff, 0x7e, 0xff, 0x7d, 0x00, 0x7c} },
+{ 0x8578,      16,     {0x00, 0xab, 0x64, 0xaa, 0x63, 0xa9, 0x62, 0xa8, 0x61, 0xd3, 0x12, 0x9b, 0xc0, 0x40, 0x0c, 0x75} },
+{ 0x8588,      16,     {0x64, 0xff, 0x75, 0x63, 0xff, 0x75, 0x62, 0x00, 0x75, 0x61, 0x00, 0x85, 0x67, 0x82, 0x85, 0x66} },
+{ 0x8598,      16,     {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xe5, 0x64} },
+{ 0x85a8,      16,     {0xf0, 0xaf, 0x64, 0xae, 0x63, 0xad, 0x62, 0xac, 0x61, 0x78, 0x08, 0x12, 0x9b, 0xd1, 0x85, 0x67} },
+{ 0x85b8,      16,     {0x82, 0x85, 0x66, 0x83, 0xa3, 0xef, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3} },
+{ 0x85c8,      16,     {0xe0, 0x54, 0x7f, 0xf0, 0xe4, 0xf5, 0x65, 0xe5, 0x60, 0x24, 0x08, 0xf5, 0x82, 0xe4, 0x35, 0x5f} },
+{ 0x85d8,      16,     {0xf5, 0x83, 0xe0, 0xff, 0xb4, 0x62, 0x05, 0x43, 0x65, 0x0a, 0x80, 0x10, 0xef, 0xb4, 0x72, 0x05} },
+{ 0x85e8,      16,     {0x43, 0x65, 0x08, 0x80, 0x07, 0xef, 0xb4, 0x74, 0x03, 0x43, 0x65, 0x02, 0xe5, 0x60, 0x24, 0x0b} },
+{ 0x85f8,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0x30, 0xe3, 0x03, 0x43, 0x65, 0x80, 0xef} },
+{ 0x8608,      16,     {0x30, 0xe7, 0x12, 0x43, 0x65, 0x40, 0xe5, 0x67, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5} },
+{ 0x8618,      16,     {0x83, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x60, 0x24, 0x0b, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83} },
+{ 0x8628,      16,     {0xe0, 0xff, 0x20, 0xe1, 0x03, 0x30, 0xe4, 0x27, 0x85, 0x60, 0x82, 0x85, 0x5f, 0x83, 0xe0, 0x14} },
+{ 0x8638,      16,     {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x3b, 0xe5, 0x67} },
+{ 0x8648,      16,     {0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x17, 0x85} },
+{ 0x8658,      16,     {0x60, 0x82, 0x85, 0x5f, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3} },
+{ 0x8668,      16,     {0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x3b, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3, 0x74} },
 { 0x8678,      16,     {0xbf, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x65, 0xf0, 0xe5} },
-{ 0x8688,      16,     {0x60, 0x24, 0x0a, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0xe5} },
-{ 0x8698,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24, 0x0a, 0xf5, 0x82, 0x0a} },
-{ 0x86a8,      16,     {0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xe4} },
-{ 0x86b8,      16,     {0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xf5} },
-{ 0x86c8,      16,     {0xe5, 0x67, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x60, 0xf0} },
-{ 0x86d8,      16,     {0x09, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x07, 0xf5, 0x24} },
-{ 0x86e8,      16,     {0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0x83} },
-{ 0x86f8,      16,     {0xe4, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xf0, 0x85, 0x60, 0x82, 0x85, 0x60} },
-{ 0x8708,      16,     {0x83, 0xe0, 0x14, 0xff, 0x7d, 0x06, 0x12, 0x82, 0x60, 0x75, 0x65, 0x08, 0xe5, 0x60, 0x24, 0xe5} },
-{ 0x8718,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x60, 0x03, 0x43, 0x65, 0x10, 0xe5, 0x67, 0x10} },
-{ 0x8728,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x45, 0x65, 0xf0, 0xe5, 0x65} },
-{ 0x8738,      16,     {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x14, 0xff, 0x25, 0xe0, 0x25, 0x25} },
-{ 0x8748,      16,     {0xff, 0xe5, 0x60, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x24, 0xfb, 0xe0} },
-{ 0x8758,      16,     {0xf5, 0x65, 0xe5, 0x60, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x24, 0x83} },
-{ 0x8768,      16,     {0x60, 0x15, 0x14, 0x60, 0x17, 0x24, 0xc2, 0x60, 0x09, 0x24, 0x0a, 0x70, 0x12, 0x43, 0x65, 0x12} },
-{ 0x8778,      16,     {0x80, 0x0d, 0x43, 0x65, 0x08, 0x80, 0x08, 0x43, 0x65, 0x38, 0x80, 0x03, 0x43, 0x65, 0x28, 0x43} },
-{ 0x8788,      13,     {0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3, 0xe5, 0x65, 0xf0, 0x7f, 0x65} },
-{ 0x8795,      1,      {0x87} },
-{ 0x8796,      4,      {0x8e, 0x47, 0x8f, 0x8e} },
-{ 0x879a,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x4a, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x24} },
-{ 0x87aa,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x4d, 0x8f, 0x4e, 0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x80} },
-{ 0x87ba,      16,     {0xf5, 0x4c, 0xe4, 0x3e, 0xf5, 0x4b, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x08, 0xf0, 0xe5, 0x4a, 0xf0} },
-{ 0x87ca,      16,     {0x85, 0x4c, 0x82, 0x85, 0x4b, 0x83, 0xf0, 0xa3, 0xe4, 0xf0, 0xe5, 0x4e, 0x24, 0x06, 0xf5, 0x24} },
-{ 0x87da,      16,     {0xe4, 0x35, 0x4d, 0xf5, 0x83, 0xe0, 0x85, 0x4c, 0x82, 0x85, 0x4b, 0x83, 0xa3, 0xa3, 0xf0, 0xa3} },
-{ 0x87ea,      16,     {0x4e, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4d, 0xf5, 0x83, 0xe0, 0x54, 0x1e, 0x85, 0x4c, 0x1e} },
-{ 0x87fa,      16,     {0x85, 0x4b, 0x83, 0xa3, 0xa3, 0xa3, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x83} },
-{ 0x880a,      16,     {0xf8, 0xe6, 0xff, 0xe5, 0x4c, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x4b, 0xf5, 0x83, 0xef, 0xf5} },
-{ 0x881a,      16,     {0xaf, 0x4a, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x49, 0xfc} },
-{ 0x882a,      16,     {0x02, 0x12, 0x81, 0x11, 0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xe5, 0x49, 0x5f, 0xe5} },
-{ 0x883a,      16,     {0xe5, 0x4c, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4b, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xf0} },
-{ 0x884a,      5,      {0x74, 0x07, 0xf0, 0x7f, 0x07} },
-{ 0x884f,      1,      {0x88} },
-{ 0x8850,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x8860,      16,     {0xaf, 0x82, 0xf5, 0x47, 0x8f, 0x48, 0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xfd, 0xe4, 0x01} },
-{ 0x8870,      16,     {0xfc, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x0a, 0xf0, 0xe5, 0x48, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x8880,      16,     {0x47, 0xf5, 0x83, 0xe0, 0x8d, 0x82, 0x8c, 0x83, 0xf0, 0x90, 0x7f, 0xc3, 0x74, 0x02, 0xf0, 0x74} },
-{ 0x8890,      1,      {0x88} },
-{ 0x8891,      1,      {0x88} },
-{ 0x8892,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x88a2,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x88b2,      16,     {0xf5, 0x83, 0xe0, 0x44, 0x02, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xef} },
-{ 0x88c2,      11,     {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0xf0, 0x7f, 0xfd} },
-{ 0x88cd,      1,      {0x88} },
-{ 0x88ce,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x88de,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x88ee,      16,     {0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xef} },
-{ 0x88fe,      11,     {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0xfe} },
-{ 0x8909,      1,      {0x89} },
-{ 0x890a,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x891a,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0d, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0x83} },
-{ 0x892a,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x80, 0x0f, 0xae, 0x04, 0xaf, 0x05, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0x8e} },
-{ 0x893a,      7,      {0xa3, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0xbf} },
-{ 0x8941,      1,      {0x89} },
-{ 0x8942,      4,      {0x8e, 0x47, 0x8f, 0x8e} },
-{ 0x8946,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0, 0xf5, 0x4b, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x24, 0xfe, 0xe0} },
-{ 0x8956,      16,     {0x16, 0x14, 0x60, 0x1f, 0x14, 0x60, 0x28, 0x24, 0x03, 0x70, 0x2e, 0x7e, 0x7e, 0x7f, 0x80, 0x7e} },
-{ 0x8966,      16,     {0x49, 0x7e, 0x75, 0x4a, 0x80, 0x80, 0x22, 0x7e, 0x7e, 0x7f, 0x00, 0x75, 0x49, 0x7e, 0x75, 0x49} },
-{ 0x8976,      16,     {0x00, 0x80, 0x16, 0x7e, 0x7d, 0x7f, 0x80, 0x75, 0x49, 0x7d, 0x75, 0x4a, 0x80, 0x80, 0x0a, 0x80} },
-{ 0x8986,      16,     {0x7d, 0x7f, 0x00, 0x75, 0x49, 0x7d, 0x75, 0x4a, 0x00, 0xe5, 0x4b, 0x70, 0x20, 0x85, 0x4a, 0x20} },
-{ 0x8996,      16,     {0x85, 0x49, 0x83, 0x74, 0xff, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x25, 0xe0, 0xe0} },
-{ 0x89a6,      16,     {0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x3a, 0xe5, 0x48, 0x3a} },
-{ 0x89b6,      16,     {0x02, 0xff, 0xe4, 0x35, 0x47, 0xfe, 0xe5, 0x4b, 0x60, 0x10, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x8e} },
-{ 0x89c6,      16,     {0x4a, 0x82, 0x85, 0x49, 0x83, 0xf0, 0x15, 0x4b, 0x80, 0xec, 0x85, 0x48, 0x82, 0x85, 0x47, 0x82} },
-{ 0x89d6,      16,     {0xa3, 0xe0, 0xff, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x25, 0xe0, 0x24, 0xb5, 0xf5, 0x24} },
-{ 0x89e6,      9,      {0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x7f, 0xef} },
-{ 0x89ef,      1,      {0x89} },
-{ 0x89f0,      16,     {0xef, 0x24, 0x01, 0xf5, 0x48, 0xe4, 0x3e, 0xf5, 0x47, 0x7c, 0x7b, 0x7d, 0x80, 0x7e, 0x7b, 0x80} },
-{ 0x8a00,      16,     {0x80, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x07, 0xf0, 0xef, 0x24, 0x01, 0xff, 0xe4, 0x3e, 0x90, 0xe4} },
-{ 0x8a10,      16,     {0x31, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xa3} },
-{ 0x8a20,      16,     {0xa3, 0xe0, 0x8e, 0x49, 0xf5, 0x4a, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x9e, 0xe0} },
-{ 0x8a30,      16,     {0x61, 0x24, 0xf9, 0x60, 0x0e, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8a, 0xdd, 0x24, 0x14, 0x60, 0x24} },
-{ 0x8a40,      16,     {0x02, 0x8b, 0x30, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xa3} },
-{ 0x8a50,      16,     {0xe4, 0x9f, 0xf5, 0x4c, 0x74, 0x01, 0x9e, 0xf5, 0x4b, 0xd3, 0xe5, 0x4c, 0x94, 0x40, 0xe5, 0x94} },
-{ 0x8a60,      16,     {0x94, 0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5, 0x4a, 0x95, 0x4c, 0x4a} },
+{ 0x8688,      16,     {0x60, 0x24, 0x0a, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x04} },
+{ 0x8698,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24, 0x0a, 0xf5, 0x82, 0xe4} },
+{ 0x86a8,      16,     {0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5} },
+{ 0x86b8,      16,     {0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff} },
+{ 0x86c8,      16,     {0xe5, 0x67, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24} },
+{ 0x86d8,      16,     {0x09, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x07, 0xf5, 0x82} },
+{ 0x86e8,      16,     {0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3} },
+{ 0x86f8,      16,     {0xe4, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xf0, 0x85, 0x60, 0x82, 0x85, 0x5f} },
+{ 0x8708,      16,     {0x83, 0xe0, 0x14, 0xff, 0x7d, 0x06, 0x12, 0x82, 0x60, 0x75, 0x65, 0x08, 0xe5, 0x60, 0x24, 0x0c} },
+{ 0x8718,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x60, 0x03, 0x43, 0x65, 0x10, 0xe5, 0x67, 0x24} },
+{ 0x8728,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x45, 0x65, 0xf0, 0xe5, 0x60} },
+{ 0x8738,      16,     {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x14, 0xff, 0x25, 0xe0, 0x25, 0xe0} },
+{ 0x8748,      16,     {0xff, 0xe5, 0x60, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x24, 0xfb, 0x4f} },
+{ 0x8758,      16,     {0xf5, 0x65, 0xe5, 0x60, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x24, 0xd0} },
+{ 0x8768,      16,     {0x60, 0x15, 0x14, 0x60, 0x17, 0x24, 0xc2, 0x60, 0x09, 0x24, 0x0a, 0x70, 0x12, 0x43, 0x65, 0x18} },
+{ 0x8778,      16,     {0x80, 0x0d, 0x43, 0x65, 0x08, 0x80, 0x08, 0x43, 0x65, 0x38, 0x80, 0x03, 0x43, 0x65, 0x28, 0x85} },
+{ 0x8788,      13,     {0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3, 0xe5, 0x65, 0xf0, 0x7f, 0x00} },
+{ 0x8795,      1,      {0x22} },
+{ 0x8796,      4,      {0x8e, 0x47, 0x8f, 0x48} },
+{ 0x879a,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x4a, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82} },
+{ 0x87aa,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x4d, 0x8f, 0x4e, 0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01} },
+{ 0x87ba,      16,     {0xf5, 0x4c, 0xe4, 0x3e, 0xf5, 0x4b, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x08, 0xf0, 0xe5, 0x4a, 0x04} },
+{ 0x87ca,      16,     {0x85, 0x4c, 0x82, 0x85, 0x4b, 0x83, 0xf0, 0xa3, 0xe4, 0xf0, 0xe5, 0x4e, 0x24, 0x06, 0xf5, 0x82} },
+{ 0x87da,      16,     {0xe4, 0x35, 0x4d, 0xf5, 0x83, 0xe0, 0x85, 0x4c, 0x82, 0x85, 0x4b, 0x83, 0xa3, 0xa3, 0xf0, 0xe5} },
+{ 0x87ea,      16,     {0x4e, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4d, 0xf5, 0x83, 0xe0, 0x54, 0x1e, 0x85, 0x4c, 0x82} },
+{ 0x87fa,      16,     {0x85, 0x4b, 0x83, 0xa3, 0xa3, 0xa3, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x2b} },
+{ 0x880a,      16,     {0xf8, 0xe6, 0xff, 0xe5, 0x4c, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x4b, 0xf5, 0x83, 0xef, 0xf0} },
+{ 0x881a,      16,     {0xaf, 0x4a, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x49, 0x7f} },
+{ 0x882a,      16,     {0x02, 0x12, 0x81, 0x11, 0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xe5, 0x49, 0x5f, 0xff} },
+{ 0x883a,      16,     {0xe5, 0x4c, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4b, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xc3} },
+{ 0x884a,      5,      {0x74, 0x07, 0xf0, 0x7f, 0x00} },
+{ 0x884f,      1,      {0x22} },
+{ 0x8850,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
+{ 0x8860,      16,     {0xaf, 0x82, 0xf5, 0x47, 0x8f, 0x48, 0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xfd, 0xe4, 0x3e} },
+{ 0x8870,      16,     {0xfc, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x0a, 0xf0, 0xe5, 0x48, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35} },
+{ 0x8880,      16,     {0x47, 0xf5, 0x83, 0xe0, 0x8d, 0x82, 0x8c, 0x83, 0xf0, 0x90, 0x7f, 0xc3, 0x74, 0x02, 0xf0, 0x7f} },
+{ 0x8890,      1,      {0x00} },
+{ 0x8891,      1,      {0x22} },
+{ 0x8892,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
+{ 0x88a2,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c} },
+{ 0x88b2,      16,     {0xf5, 0x83, 0xe0, 0x44, 0x02, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xf5} },
+{ 0x88c2,      11,     {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0xf0, 0x7f, 0x00} },
+{ 0x88cd,      1,      {0x22} },
+{ 0x88ce,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
+{ 0x88de,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c} },
+{ 0x88ee,      16,     {0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xf5} },
+{ 0x88fe,      11,     {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x00} },
+{ 0x8909,      1,      {0x22} },
+{ 0x890a,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
+{ 0x891a,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0d, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0xa3} },
+{ 0x892a,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x80, 0x0f, 0xae, 0x04, 0xaf, 0x05, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3} },
+{ 0x893a,      7,      {0xa3, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x00} },
+{ 0x8941,      1,      {0x22} },
+{ 0x8942,      4,      {0x8e, 0x47, 0x8f, 0x48} },
+{ 0x8946,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0, 0xf5, 0x4b, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x24, 0xfe, 0x60} },
+{ 0x8956,      16,     {0x16, 0x14, 0x60, 0x1f, 0x14, 0x60, 0x28, 0x24, 0x03, 0x70, 0x2e, 0x7e, 0x7e, 0x7f, 0x80, 0x75} },
+{ 0x8966,      16,     {0x49, 0x7e, 0x75, 0x4a, 0x80, 0x80, 0x22, 0x7e, 0x7e, 0x7f, 0x00, 0x75, 0x49, 0x7e, 0x75, 0x4a} },
+{ 0x8976,      16,     {0x00, 0x80, 0x16, 0x7e, 0x7d, 0x7f, 0x80, 0x75, 0x49, 0x7d, 0x75, 0x4a, 0x80, 0x80, 0x0a, 0x7e} },
+{ 0x8986,      16,     {0x7d, 0x7f, 0x00, 0x75, 0x49, 0x7d, 0x75, 0x4a, 0x00, 0xe5, 0x4b, 0x70, 0x20, 0x85, 0x4a, 0x82} },
+{ 0x8996,      16,     {0x85, 0x49, 0x83, 0x74, 0xff, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x25, 0xe0, 0x24} },
+{ 0x89a6,      16,     {0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x3a, 0xe5, 0x48, 0x24} },
+{ 0x89b6,      16,     {0x02, 0xff, 0xe4, 0x35, 0x47, 0xfe, 0xe5, 0x4b, 0x60, 0x10, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x85} },
+{ 0x89c6,      16,     {0x4a, 0x82, 0x85, 0x49, 0x83, 0xf0, 0x15, 0x4b, 0x80, 0xec, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83} },
+{ 0x89d6,      16,     {0xa3, 0xe0, 0xff, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x25, 0xe0, 0x24, 0xb5, 0xf5, 0x82} },
+{ 0x89e6,      9,      {0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x7f, 0x00} },
+{ 0x89ef,      1,      {0x22} },
+{ 0x89f0,      16,     {0xef, 0x24, 0x01, 0xf5, 0x48, 0xe4, 0x3e, 0xf5, 0x47, 0x7c, 0x7b, 0x7d, 0x80, 0x7e, 0x7b, 0x7f} },
+{ 0x8a00,      16,     {0x80, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x07, 0xf0, 0xef, 0x24, 0x01, 0xff, 0xe4, 0x3e, 0x90, 0x01} },
+{ 0x8a10,      16,     {0x31, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xfe} },
+{ 0x8a20,      16,     {0xa3, 0xe0, 0x8e, 0x49, 0xf5, 0x4a, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x9e, 0x60} },
+{ 0x8a30,      16,     {0x61, 0x24, 0xf9, 0x60, 0x0e, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8a, 0xdd, 0x24, 0x14, 0x60, 0x03} },
+{ 0x8a40,      16,     {0x02, 0x8b, 0x30, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3} },
+{ 0x8a50,      16,     {0xe4, 0x9f, 0xf5, 0x4c, 0x74, 0x01, 0x9e, 0xf5, 0x4b, 0xd3, 0xe5, 0x4c, 0x94, 0x40, 0xe5, 0x4b} },
+{ 0x8a60,      16,     {0x94, 0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5, 0x4a, 0x95, 0x4c, 0xe5} },
 { 0x8a70,      16,     {0x49, 0x95, 0x4b, 0x50, 0x03, 0x02, 0x8b, 0x30, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x82, 0x85} },
-{ 0x8a80,      16,     {0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a, 0x49} },
-{ 0x8a90,      16,     {0x8b, 0x30, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe0} },
-{ 0x8aa0,      16,     {0x30, 0x9f, 0xf5, 0x4c, 0xe4, 0x9e, 0xf5, 0x4b, 0xd3, 0xe5, 0x4c, 0x94, 0x40, 0xe5, 0x4b, 0x40} },
-{ 0x8ab0,      16,     {0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5, 0x4a, 0x95, 0x4c, 0xe5, 0x95} },
-{ 0x8ac0,      16,     {0x95, 0x4b, 0x40, 0x6c, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0x47} },
-{ 0x8ad0,      16,     {0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a, 0x80, 0x53, 0x85, 0x48, 0x53} },
-{ 0x8ae0,      16,     {0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f, 0xf5, 0x4c, 0xe4, 0xf5} },
-{ 0x8af0,      16,     {0xf5, 0x4b, 0x45, 0x4c, 0x70, 0x07, 0xf5, 0x4b, 0x75, 0x4c, 0x40, 0x80, 0x11, 0xd3, 0xe5, 0x11} },
-{ 0x8b00,      16,     {0x94, 0x40, 0xe5, 0x4b, 0x94, 0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0x4c} },
-{ 0x8b10,      16,     {0x4a, 0x95, 0x4c, 0xe5, 0x49, 0x95, 0x4b, 0x40, 0x17, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x4c} },
-{ 0x8b20,      16,     {0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x8e} },
-{ 0x8b30,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x9e, 0x70, 0x03, 0x02, 0x8b, 0xf0, 0x24, 0x8b} },
-{ 0x8b40,      16,     {0x60, 0x58, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8c, 0x40, 0x24, 0x14, 0x60, 0x03, 0x02, 0x8c, 0x03} },
-{ 0x8b50,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xd3, 0x94, 0xff, 0xd3} },
-{ 0x8b60,      16,     {0x94, 0x00, 0x40, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2c, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0xe5} },
-{ 0x8b70,      16,     {0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x70, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2c, 0x90} },
-{ 0x8b80,      16,     {0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x31, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0xf0} },
-{ 0x8b90,      16,     {0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2, 0x85, 0x48, 0x82, 0x85, 0x47, 0x82} },
-{ 0x8ba0,      16,     {0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x80, 0xee, 0x94, 0x00, 0x50, 0x03, 0x02, 0x50} },
-{ 0x8bb0,      16,     {0x84, 0xd3, 0xef, 0x94, 0xff, 0xee, 0x94, 0x00, 0x40, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x84} },
-{ 0x8bc0,      16,     {0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x70, 0x03, 0x4e} },
-{ 0x8bd0,      16,     {0x8c, 0x84, 0x90, 0x01, 0x2d, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0xff} },
-{ 0x8be0,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xef} },
-{ 0x8bf0,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x20, 0xc3} },
-{ 0x8c00,      16,     {0x94, 0x00, 0x50, 0x03, 0x02, 0x8c, 0x84, 0xd3, 0xef, 0x94, 0x2f, 0xee, 0x94, 0x00, 0x50, 0x94} },
-{ 0x8c10,      16,     {0x90, 0x01, 0x2e, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x02} },
-{ 0x8c20,      16,     {0x60, 0x62, 0x90, 0x01, 0x2e, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0xff} },
-{ 0x8c30,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xef} },
-{ 0x8c40,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x01, 0x2f, 0xcf, 0x01} },
-{ 0x8c50,      16,     {0xa3, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x60, 0x49} },
-{ 0x8c60,      16,     {0x90, 0x01, 0x2f, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0x82} },
-{ 0x8c70,      16,     {0xff, 0x90, 0x01, 0x31, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0xf0} },
-{ 0x8c80,      16,     {0xef, 0xf0, 0x80, 0xcf, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xa3, 0xa3} },
-{ 0x8c90,      6,      {0x90, 0x7f, 0xc3, 0xf0, 0x7f, 0xc3} },
-{ 0x8c96,      1,      {0x8c} },
-{ 0x8c97,      16,     {0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xfd, 0xe4, 0x3e, 0xfc, 0x8f, 0x82, 0x8e, 0x83, 0x82} },
-{ 0x8ca7,      16,     {0x0b, 0xf0, 0x90, 0x20, 0x70, 0xe0, 0x54, 0xf0, 0xff, 0xc4, 0x54, 0x0f, 0x8d, 0x82, 0x8c, 0x8d} },
-{ 0x8cb7,      16,     {0xf0, 0x90, 0x11, 0xf0, 0xe4, 0x93, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xf0, 0x90, 0x11, 0xf1, 0x90} },
-{ 0x8cc7,      16,     {0x93, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0xf0, 0xe4, 0x90, 0x01, 0x33, 0xf0, 0xa3, 0xf0, 0xf0} },
-{ 0x8cd7,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xed, 0x24, 0x03, 0xfe, 0xe4, 0x3c, 0xfe} },
-{ 0x8ce7,      16,     {0xf0, 0xa3, 0xce, 0xf0, 0x7e, 0x01, 0x7f, 0x33, 0x12, 0x19, 0xc1, 0x90, 0x7f, 0xc3, 0x74, 0x7f} },
+{ 0x8a80,      16,     {0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a, 0x02} },
+{ 0x8a90,      16,     {0x8b, 0x30, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x74} },
+{ 0x8aa0,      16,     {0x30, 0x9f, 0xf5, 0x4c, 0xe4, 0x9e, 0xf5, 0x4b, 0xd3, 0xe5, 0x4c, 0x94, 0x40, 0xe5, 0x4b, 0x94} },
+{ 0x8ab0,      16,     {0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5, 0x4a, 0x95, 0x4c, 0xe5, 0x49} },
+{ 0x8ac0,      16,     {0x95, 0x4b, 0x40, 0x6c, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3} },
+{ 0x8ad0,      16,     {0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a, 0x80, 0x53, 0x85, 0x48, 0x82} },
+{ 0x8ae0,      16,     {0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f, 0xf5, 0x4c, 0xe4, 0x9e} },
+{ 0x8af0,      16,     {0xf5, 0x4b, 0x45, 0x4c, 0x70, 0x07, 0xf5, 0x4b, 0x75, 0x4c, 0x40, 0x80, 0x11, 0xd3, 0xe5, 0x4c} },
+{ 0x8b00,      16,     {0x94, 0x40, 0xe5, 0x4b, 0x94, 0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5} },
+{ 0x8b10,      16,     {0x4a, 0x95, 0x4c, 0xe5, 0x49, 0x95, 0x4b, 0x40, 0x17, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x82} },
+{ 0x8b20,      16,     {0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a} },
+{ 0x8b30,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x9e, 0x70, 0x03, 0x02, 0x8b, 0xf0, 0x24, 0xf9} },
+{ 0x8b40,      16,     {0x60, 0x58, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8c, 0x40, 0x24, 0x14, 0x60, 0x03, 0x02, 0x8c, 0x84} },
+{ 0x8b50,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xd3, 0x94, 0xff, 0xee} },
+{ 0x8b60,      16,     {0x94, 0x00, 0x40, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2c, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a} },
+{ 0x8b70,      16,     {0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x70, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2c, 0xe0} },
+{ 0x8b80,      16,     {0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x31, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a} },
+{ 0x8b90,      16,     {0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83} },
+{ 0x8ba0,      16,     {0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x80, 0xee, 0x94, 0x00, 0x50, 0x03, 0x02, 0x8c} },
+{ 0x8bb0,      16,     {0x84, 0xd3, 0xef, 0x94, 0xff, 0xee, 0x94, 0x00, 0x40, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2d} },
+{ 0x8bc0,      16,     {0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x70, 0x03, 0x02} },
+{ 0x8bd0,      16,     {0x8c, 0x84, 0x90, 0x01, 0x2d, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x31} },
+{ 0x8be0,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2} },
+{ 0x8bf0,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x20, 0xee} },
+{ 0x8c00,      16,     {0x94, 0x00, 0x50, 0x03, 0x02, 0x8c, 0x84, 0xd3, 0xef, 0x94, 0x2f, 0xee, 0x94, 0x00, 0x50, 0x74} },
+{ 0x8c10,      16,     {0x90, 0x01, 0x2e, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e} },
+{ 0x8c20,      16,     {0x60, 0x62, 0x90, 0x01, 0x2e, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x31} },
+{ 0x8c30,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd5} },
+{ 0x8c40,      16,     {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x01, 0x2f, 0xcf, 0xf0} },
+{ 0x8c50,      16,     {0xa3, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x60, 0x24} },
+{ 0x8c60,      16,     {0x90, 0x01, 0x2f, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0} },
+{ 0x8c70,      16,     {0xff, 0x90, 0x01, 0x31, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83} },
+{ 0x8c80,      16,     {0xef, 0xf0, 0x80, 0xcf, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xa3, 0xe0} },
+{ 0x8c90,      6,      {0x90, 0x7f, 0xc3, 0xf0, 0x7f, 0x00} },
+{ 0x8c96,      1,      {0x22} },
+{ 0x8c97,      16,     {0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xfd, 0xe4, 0x3e, 0xfc, 0x8f, 0x82, 0x8e, 0x83, 0x74} },
+{ 0x8ca7,      16,     {0x0b, 0xf0, 0x90, 0x20, 0x70, 0xe0, 0x54, 0xf0, 0xff, 0xc4, 0x54, 0x0f, 0x8d, 0x82, 0x8c, 0x83} },
+{ 0x8cb7,      16,     {0xf0, 0x90, 0x11, 0xf0, 0xe4, 0x93, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xf0, 0x90, 0x11, 0xf1, 0xe4} },
+{ 0x8cc7,      16,     {0x93, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0xf0, 0xe4, 0x90, 0x01, 0x33, 0xf0, 0xa3, 0xf0, 0xa3} },
+{ 0x8cd7,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xed, 0x24, 0x03, 0xfe, 0xe4, 0x3c, 0xa3} },
+{ 0x8ce7,      16,     {0xf0, 0xa3, 0xce, 0xf0, 0x7e, 0x01, 0x7f, 0x33, 0x12, 0x19, 0xc1, 0x90, 0x7f, 0xc3, 0x74, 0x14} },
 { 0x8cf7,      3,      {0xf0, 0x7f, 0x00} },
-{ 0x8cfa,      1,      {0x8c} },
-{ 0x8cfb,      4,      {0x8e, 0x40, 0x8f, 0x8e} },
-{ 0x8cff,      16,     {0x85, 0x40, 0x43, 0x85, 0x41, 0x44, 0x85, 0x44, 0x82, 0x85, 0x43, 0x83, 0xe0, 0x14, 0xb4, 0xe0} },
-{ 0x8d0f,      16,     {0x00, 0x40, 0x03, 0x02, 0x8e, 0x32, 0x90, 0x8d, 0x1c, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x8d, 0x73} },
+{ 0x8cfa,      1,      {0x22} },
+{ 0x8cfb,      4,      {0x8e, 0x40, 0x8f, 0x41} },
+{ 0x8cff,      16,     {0x85, 0x40, 0x43, 0x85, 0x41, 0x44, 0x85, 0x44, 0x82, 0x85, 0x43, 0x83, 0xe0, 0x14, 0xb4, 0x0f} },
+{ 0x8d0f,      16,     {0x00, 0x40, 0x03, 0x02, 0x8e, 0x32, 0x90, 0x8d, 0x1c, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x8d, 0x49} },
 { 0x8d1f,      16,     {0x02, 0x8d, 0x5a, 0x02, 0x8d, 0x6b, 0x02, 0x8d, 0x8e, 0x02, 0x8d, 0x9f, 0x02, 0x8d, 0xb0, 0x02} },
-{ 0x8d2f,      16,     {0x8d, 0xc0, 0x02, 0x8d, 0xcb, 0x02, 0x8d, 0xdb, 0x02, 0x8d, 0xeb, 0x02, 0x8d, 0xfb, 0x02, 0x8d} },
-{ 0x8d3f,      16,     {0x02, 0x02, 0x8e, 0x32, 0x02, 0x8e, 0x12, 0x02, 0x8e, 0x22, 0xe5, 0x44, 0x24, 0x01, 0xff, 0x24} },
-{ 0x8d4f,      16,     {0x35, 0x43, 0xfe, 0x12, 0x82, 0xea, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5, 0x44, 0x24, 0x01, 0x44} },
-{ 0x8d5f,      16,     {0xe4, 0x35, 0x43, 0xfe, 0x12, 0x83, 0x9f, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5, 0x44, 0x24, 0xe5} },
-{ 0x8d6f,      16,     {0xf5, 0x46, 0xe4, 0x35, 0x43, 0xf5, 0x45, 0xe5, 0x46, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x45, 0xe4} },
-{ 0x8d7f,      16,     {0x12, 0x84, 0x61, 0xaf, 0x46, 0xae, 0x45, 0x12, 0x84, 0xf4, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0x02} },
-{ 0x8d8f,      16,     {0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0x92, 0x8f, 0x42, 0x02, 0x8e, 0x42} },
-{ 0x8d9f,      16,     {0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0xce, 0x8f, 0x42, 0x02, 0x8f} },
-{ 0x8daf,      16,     {0x32, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x89, 0x0a, 0x8f, 0x42, 0x0a} },
-{ 0x8dbf,      16,     {0x72, 0xaf, 0x41, 0xae, 0x40, 0x12, 0x89, 0xf0, 0x8f, 0x42, 0x80, 0x67, 0xe5, 0x44, 0x24, 0xe5} },
-{ 0x8dcf,      16,     {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x87, 0x96, 0x8f, 0x42, 0x80, 0x57, 0xe5, 0x44, 0x24, 0xe5} },
-{ 0x8ddf,      16,     {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x84, 0x1d, 0x8f, 0x42, 0x80, 0x47, 0xe5, 0x44, 0x24, 0xe5} },
-{ 0x8def,      16,     {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0x50, 0x8f, 0x42, 0x80, 0x37, 0x12, 0x8c, 0x97, 0x12} },
-{ 0x8dff,      16,     {0x42, 0x80, 0x30, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x11, 0xd8, 0x12} },
-{ 0x8e0f,      16,     {0x42, 0x80, 0x20, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x89, 0x42, 0x12} },
-{ 0x8e1f,      16,     {0x42, 0x80, 0x10, 0xaf, 0x41, 0xae, 0x40, 0x7c, 0x02, 0x7d, 0x4d, 0x7b, 0x40, 0x12, 0x1b, 0x40} },
-{ 0x8e2f,      5,      {0xe4, 0xf5, 0x42, 0xaf, 0xf5} },
-{ 0x8e34,      1,      {0x8e} },
-{ 0x8e35,      8,      {0x8f, 0x61, 0x8e, 0x60, 0x8d, 0x5f, 0x8c, 0x8d} },
-{ 0x8e3d,      16,     {0x75, 0x68, 0x01, 0x75, 0x69, 0x3b, 0xe4, 0xf5, 0x67, 0xaf, 0x63, 0x15, 0x63, 0xef, 0x70, 0x63} },
-{ 0x8e4d,      16,     {0x02, 0x8e, 0xd3, 0xaf, 0x62, 0xe4, 0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xaf, 0xab} },
-{ 0x8e5d,      16,     {0xae, 0x60, 0xad, 0x5f, 0xac, 0x5e, 0x12, 0x9b, 0x2e, 0xaf, 0x03, 0x8f, 0x66, 0xaf, 0x61, 0x66} },
-{ 0x8e6d,      16,     {0x60, 0xad, 0x5f, 0xac, 0x5e, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x62, 0x07} },
-{ 0x8e7d,      16,     {0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0xd0} },
-{ 0x8e8d,      16,     {0x12, 0x9b, 0x2e, 0x8f, 0x61, 0x8e, 0x60, 0x8d, 0x5f, 0x8c, 0x5e, 0xe5, 0x66, 0x24, 0x30, 0x66} },
-{ 0x8e9d,      16,     {0x66, 0xd3, 0x94, 0x39, 0x40, 0x06, 0x74, 0x07, 0x25, 0x66, 0xf5, 0x66, 0x05, 0x69, 0xe5, 0x05} },
-{ 0x8ead,      16,     {0xae, 0x68, 0x70, 0x02, 0x05, 0x68, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x05, 0x69, 0xf0} },
-{ 0x8ebd,      16,     {0x69, 0xae, 0x68, 0x70, 0x02, 0x05, 0x68, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe5, 0x66, 0xf0, 0xe5} },
-{ 0x8ecd,      16,     {0x67, 0x05, 0x67, 0x02, 0x8e, 0x46, 0xe5, 0x69, 0x15, 0x69, 0x70, 0x02, 0x15, 0x68, 0xaf, 0x15} },
-{ 0x8edd,      16,     {0x15, 0x67, 0xef, 0x60, 0x23, 0xe5, 0x69, 0x15, 0x69, 0xae, 0x68, 0x70, 0x02, 0x15, 0x68, 0x02} },
-{ 0x8eed,      16,     {0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05, 0x65, 0xe5, 0x65, 0xac, 0x64, 0x70, 0x02, 0x05, 0x64, 0x02} },
-{ 0x8efd,      8,      {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x80, 0xef} },
-{ 0x8f05,      1,      {0x8f} },
-{ 0x8f06,      16,     {0xe4, 0x90, 0x01, 0x67, 0xf0, 0x7e, 0x01, 0x7f, 0x68, 0x90, 0x01, 0x5c, 0xee, 0xf0, 0xa3, 0xee} },
-{ 0x8f16,      10,     {0xf0, 0x90, 0x01, 0x60, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xa3} },
-{ 0x8f20,      16,     {0xaa, 0x07, 0xa9, 0x05, 0x90, 0x01, 0x67, 0xe0, 0xc3, 0x94, 0x40, 0x50, 0x61, 0xac, 0x02, 0x61} },
-{ 0x8f30,      16,     {0x01, 0x7e, 0x00, 0xa8, 0x04, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xce} },
+{ 0x8d2f,      16,     {0x8d, 0xc0, 0x02, 0x8d, 0xcb, 0x02, 0x8d, 0xdb, 0x02, 0x8d, 0xeb, 0x02, 0x8d, 0xfb, 0x02, 0x8e} },
+{ 0x8d3f,      16,     {0x02, 0x02, 0x8e, 0x32, 0x02, 0x8e, 0x12, 0x02, 0x8e, 0x22, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4} },
+{ 0x8d4f,      16,     {0x35, 0x43, 0xfe, 0x12, 0x82, 0xea, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5, 0x44, 0x24, 0x01, 0xff} },
+{ 0x8d5f,      16,     {0xe4, 0x35, 0x43, 0xfe, 0x12, 0x83, 0x9f, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5, 0x44, 0x24, 0x01} },
+{ 0x8d6f,      16,     {0xf5, 0x46, 0xe4, 0x35, 0x43, 0xf5, 0x45, 0xe5, 0x46, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x45, 0xfe} },
+{ 0x8d7f,      16,     {0x12, 0x84, 0x61, 0xaf, 0x46, 0xae, 0x45, 0x12, 0x84, 0xf4, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5} },
+{ 0x8d8f,      16,     {0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0x92, 0x8f, 0x42, 0x02, 0x8e, 0x32} },
+{ 0x8d9f,      16,     {0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0xce, 0x8f, 0x42, 0x02, 0x8e} },
+{ 0x8daf,      16,     {0x32, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x89, 0x0a, 0x8f, 0x42, 0x80} },
+{ 0x8dbf,      16,     {0x72, 0xaf, 0x41, 0xae, 0x40, 0x12, 0x89, 0xf0, 0x8f, 0x42, 0x80, 0x67, 0xe5, 0x44, 0x24, 0x01} },
+{ 0x8dcf,      16,     {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x87, 0x96, 0x8f, 0x42, 0x80, 0x57, 0xe5, 0x44, 0x24, 0x01} },
+{ 0x8ddf,      16,     {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x84, 0x1d, 0x8f, 0x42, 0x80, 0x47, 0xe5, 0x44, 0x24, 0x01} },
+{ 0x8def,      16,     {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0x50, 0x8f, 0x42, 0x80, 0x37, 0x12, 0x8c, 0x97, 0x8f} },
+{ 0x8dff,      16,     {0x42, 0x80, 0x30, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x11, 0xd8, 0x8f} },
+{ 0x8e0f,      16,     {0x42, 0x80, 0x20, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x89, 0x42, 0x8f} },
+{ 0x8e1f,      16,     {0x42, 0x80, 0x10, 0xaf, 0x41, 0xae, 0x40, 0x7c, 0x02, 0x7d, 0x4d, 0x7b, 0x40, 0x12, 0x1b, 0x0c} },
+{ 0x8e2f,      5,      {0xe4, 0xf5, 0x42, 0xaf, 0x42} },
+{ 0x8e34,      1,      {0x22} },
+{ 0x8e35,      8,      {0x8f, 0x61, 0x8e, 0x60, 0x8d, 0x5f, 0x8c, 0x5e} },
+{ 0x8e3d,      16,     {0x75, 0x68, 0x01, 0x75, 0x69, 0x3b, 0xe4, 0xf5, 0x67, 0xaf, 0x63, 0x15, 0x63, 0xef, 0x70, 0x03} },
+{ 0x8e4d,      16,     {0x02, 0x8e, 0xd3, 0xaf, 0x62, 0xe4, 0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xaf, 0x61} },
+{ 0x8e5d,      16,     {0xae, 0x60, 0xad, 0x5f, 0xac, 0x5e, 0x12, 0x9b, 0x2e, 0xaf, 0x03, 0x8f, 0x66, 0xaf, 0x61, 0xae} },
+{ 0x8e6d,      16,     {0x60, 0xad, 0x5f, 0xac, 0x5e, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x62, 0xe4} },
+{ 0x8e7d,      16,     {0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04} },
+{ 0x8e8d,      16,     {0x12, 0x9b, 0x2e, 0x8f, 0x61, 0x8e, 0x60, 0x8d, 0x5f, 0x8c, 0x5e, 0xe5, 0x66, 0x24, 0x30, 0xf5} },
+{ 0x8e9d,      16,     {0x66, 0xd3, 0x94, 0x39, 0x40, 0x06, 0x74, 0x07, 0x25, 0x66, 0xf5, 0x66, 0x05, 0x69, 0xe5, 0x69} },
+{ 0x8ead,      16,     {0xae, 0x68, 0x70, 0x02, 0x05, 0x68, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x05, 0x69, 0xe5} },
+{ 0x8ebd,      16,     {0x69, 0xae, 0x68, 0x70, 0x02, 0x05, 0x68, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe5, 0x66, 0xf0, 0x05} },
+{ 0x8ecd,      16,     {0x67, 0x05, 0x67, 0x02, 0x8e, 0x46, 0xe5, 0x69, 0x15, 0x69, 0x70, 0x02, 0x15, 0x68, 0xaf, 0x67} },
+{ 0x8edd,      16,     {0x15, 0x67, 0xef, 0x60, 0x23, 0xe5, 0x69, 0x15, 0x69, 0xae, 0x68, 0x70, 0x02, 0x15, 0x68, 0xf5} },
+{ 0x8eed,      16,     {0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05, 0x65, 0xe5, 0x65, 0xac, 0x64, 0x70, 0x02, 0x05, 0x64, 0x14} },
+{ 0x8efd,      8,      {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x80, 0xd6} },
+{ 0x8f05,      1,      {0x22} },
+{ 0x8f06,      16,     {0xe4, 0x90, 0x01, 0x67, 0xf0, 0x7e, 0x01, 0x7f, 0x68, 0x90, 0x01, 0x5c, 0xee, 0xf0, 0xa3, 0xef} },
+{ 0x8f16,      10,     {0xf0, 0x90, 0x01, 0x60, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22} },
+{ 0x8f20,      16,     {0xaa, 0x07, 0xa9, 0x05, 0x90, 0x01, 0x67, 0xe0, 0xc3, 0x94, 0x40, 0x50, 0x61, 0xac, 0x02, 0x74} },
+{ 0x8f30,      16,     {0x01, 0x7e, 0x00, 0xa8, 0x04, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff} },
 { 0x8f40,      16,     {0xe4, 0xef, 0x55, 0x30, 0x60, 0x45, 0xea, 0x04, 0xff, 0x90, 0x01, 0x60, 0xe0, 0xfc, 0xa3, 0xe0} },
-{ 0x8f50,      16,     {0xfd, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0xa3, 0xe9, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0x8c} },
-{ 0x8f60,      16,     {0xeb, 0xf0, 0x90, 0x01, 0x60, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9a, 0x8e, 0xfc, 0xd3, 0xe5, 0xfc} },
-{ 0x8f70,      16,     {0x94, 0x25, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0x60, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xf0} },
-{ 0x8f80,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0x67, 0xe0, 0x04, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x01} },
-{ 0x8f90,      1,      {0x8f} },
+{ 0x8f50,      16,     {0xfd, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0xa3, 0xe9, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3} },
+{ 0x8f60,      16,     {0xeb, 0xf0, 0x90, 0x01, 0x60, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9a, 0x8e, 0xfc, 0xd3, 0xe5, 0xf0} },
+{ 0x8f70,      16,     {0x94, 0x25, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0x60, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x68} },
+{ 0x8f80,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0x67, 0xe0, 0x04, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
+{ 0x8f90,      1,      {0x22} },
 { 0x8f91,      16,     {0x90, 0x01, 0x67, 0xe0, 0xd3, 0x94, 0x00, 0x40, 0x55, 0x90, 0x01, 0x5c, 0xe0, 0xfc, 0xa3, 0xe0} },
-{ 0x8fa1,      16,     {0xaa, 0x04, 0xf9, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0xaa, 0x06, 0xa9, 0x07, 0x06} },
-{ 0x8fb1,      16,     {0x01, 0xac, 0x02, 0xad, 0x03, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x03, 0x00} },
-{ 0x8fc1,      16,     {0x9a, 0x1f, 0x90, 0x01, 0x5c, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9a, 0x8e, 0xfc, 0xd3, 0xe5, 0xfc} },
-{ 0x8fd1,      16,     {0x94, 0x25, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0x5c, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xf0} },
-{ 0x8fe1,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0x67, 0xe0, 0x14, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x01} },
-{ 0x8ff1,      1,      {0x8f} },
-{ 0x8ff2,      16,     {0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x5e, 0x7e, 0x7b, 0x7f, 0x80, 0x75, 0x63, 0x7b, 0x75, 0x63} },
-{ 0x9002,      16,     {0x80, 0xe5, 0x64, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x63, 0xa9, 0x07, 0x7b, 0x01, 0x8b, 0x65, 0x01} },
-{ 0x9012,      16,     {0x66, 0x89, 0x67, 0xfe, 0x12, 0x8f, 0x91, 0xef, 0x60, 0x3b, 0xab, 0x65, 0xaa, 0x66, 0xa9, 0xaa} },
-{ 0x9022,      16,     {0x12, 0x9a, 0x48, 0x14, 0xff, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0xb4, 0x02, 0x16, 0xc2, 0x02} },
-{ 0x9032,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xf5} },
-{ 0x9042,      16,     {0x04, 0xf0, 0xd2, 0xaf, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83, 0x74, 0x0d, 0xf0, 0x90, 0x7f, 0xf0} },
-{ 0x9052,      5,      {0x74, 0x04, 0xf0, 0xd2, 0x04} },
-{ 0x9057,      1,      {0x90} },
-{ 0x9058,      16,     {0x12, 0x8f, 0xf2, 0xe4, 0xf5, 0x5e, 0x74, 0x36, 0x25, 0x5e, 0xf8, 0xe6, 0x54, 0xf0, 0xf5, 0x54} },
-{ 0x9068,      16,     {0x74, 0x63, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xe0, 0x65, 0x5f, 0xff, 0x65} },
-{ 0x9078,      16,     {0x54, 0x0f, 0xf5, 0x60, 0x60, 0x22, 0x74, 0x63, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xe4} },
-{ 0x9088,      16,     {0x83, 0xe5, 0x5f, 0xf0, 0xaf, 0x5e, 0x7d, 0x01, 0xe5, 0x5f, 0x45, 0x60, 0xfb, 0x12, 0x8f, 0xfb} },
-{ 0x9098,      16,     {0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2, 0x80, 0xec, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0xc3} },
-{ 0x90a8,      16,     {0xb5, 0x12, 0x8f, 0xf2, 0xe5, 0x3a, 0x60, 0x48, 0xe4, 0xf5, 0x5e, 0xaf, 0x5e, 0x74, 0x01, 0x5e} },
-{ 0x90b8,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x55, 0x3a, 0x60, 0x29, 0xe5, 0x60} },
-{ 0x90c8,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x30, 0x83} },
-{ 0x90d8,      16,     {0x16, 0xaf, 0x5e, 0x7d, 0x04, 0x7b, 0x80, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05, 0x12, 0x8f, 0x05} },
-{ 0x90e8,      16,     {0x80, 0xef, 0xe5, 0x5f, 0xf4, 0x52, 0x3a, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0x94} },
-{ 0x90f8,      16,     {0x90, 0x02, 0x9e, 0xe0, 0x60, 0x03, 0x02, 0x91, 0xc5, 0x74, 0x19, 0xf0, 0x7f, 0x02, 0x12, 0x7f} },
-{ 0x9108,      16,     {0x11, 0x8e, 0x61, 0x8f, 0x62, 0xc3, 0xe5, 0x61, 0x64, 0x80, 0x94, 0x80, 0x40, 0xee, 0x90, 0x40} },
-{ 0x9118,      16,     {0x5b, 0xe0, 0x65, 0x62, 0xf0, 0x60, 0x37, 0xe4, 0xf5, 0x5e, 0xaf, 0x5e, 0x74, 0x01, 0xa8, 0x74} },
-{ 0x9128,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x90, 0x01, 0x5b, 0xe0, 0x55, 0x5f, 0xe0} },
-{ 0x9138,      16,     {0x14, 0xaf, 0x5e, 0x7d, 0x08, 0xe5, 0x5f, 0x55, 0x62, 0xfb, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x20} },
-{ 0x9148,      16,     {0x12, 0x8f, 0xf2, 0x80, 0xec, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0xcc, 0x90, 0x40} },
-{ 0x9158,      16,     {0x5b, 0xe5, 0x62, 0xf0, 0xe4, 0xf5, 0x5e, 0xc2, 0xaf, 0x74, 0x32, 0x25, 0x5e, 0xf8, 0xe6, 0x5e} },
-{ 0x9168,      16,     {0x5f, 0xe4, 0xf6, 0xd2, 0xaf, 0x53, 0x5f, 0x1e, 0xe5, 0x5f, 0x60, 0x11, 0xaf, 0x5e, 0x7d, 0xaf} },
-{ 0x9178,      16,     {0xab, 0x5f, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2, 0x80, 0xef, 0x74, 0x2c, 0xef} },
-{ 0x9188,      16,     {0x5e, 0xf8, 0xe6, 0xf5, 0x5f, 0x74, 0x9a, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x34} },
-{ 0x9198,      16,     {0xe0, 0x65, 0x5f, 0x60, 0x11, 0xaf, 0x5e, 0x7d, 0x04, 0xab, 0x5f, 0x12, 0x8f, 0x20, 0xef, 0x8f} },
-{ 0x91a8,      16,     {0x05, 0x12, 0x8f, 0xf2, 0x80, 0xef, 0x74, 0x9a, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xe4} },
-{ 0x91b8,      16,     {0x83, 0xe5, 0x5f, 0xf0, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0x9a, 0x12, 0x8f, 0x9a} },
-{ 0x91c8,      1,      {0x91} },
-{ 0x91c9,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x6e, 0x02, 0x92, 0x6e} },
-{ 0x91d5,      16,     {0x02, 0x05, 0x28, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf6} },
-{ 0x91e5,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x0c} },
-{ 0x91f5,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0x01} },
-{ 0x9205,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x92, 0x55, 0xe4, 0x92} },
-{ 0x9215,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x1f} },
-{ 0x9225,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xb8} },
+{ 0x8fa1,      16,     {0xaa, 0x04, 0xf9, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0xaa, 0x06, 0xa9, 0x07, 0xa8} },
+{ 0x8fb1,      16,     {0x01, 0xac, 0x02, 0xad, 0x03, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x03, 0x12} },
+{ 0x8fc1,      16,     {0x9a, 0x1f, 0x90, 0x01, 0x5c, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9a, 0x8e, 0xfc, 0xd3, 0xe5, 0xf0} },
+{ 0x8fd1,      16,     {0x94, 0x25, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0x5c, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x68} },
+{ 0x8fe1,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0x67, 0xe0, 0x14, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
+{ 0x8ff1,      1,      {0x22} },
+{ 0x8ff2,      16,     {0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x5e, 0x7e, 0x7b, 0x7f, 0x80, 0x75, 0x63, 0x7b, 0x75, 0x64} },
+{ 0x9002,      16,     {0x80, 0xe5, 0x64, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x63, 0xa9, 0x07, 0x7b, 0x01, 0x8b, 0x65, 0xf5} },
+{ 0x9012,      16,     {0x66, 0x89, 0x67, 0xfe, 0x12, 0x8f, 0x91, 0xef, 0x60, 0x3b, 0xab, 0x65, 0xaa, 0x66, 0xa9, 0x67} },
+{ 0x9022,      16,     {0x12, 0x9a, 0x48, 0x14, 0xff, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0xb4, 0x02, 0x16, 0xc2, 0xaf} },
+{ 0x9032,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x44} },
+{ 0x9042,      16,     {0x04, 0xf0, 0xd2, 0xaf, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83, 0x74, 0x0d, 0xf0, 0x90, 0x7f, 0xc3} },
+{ 0x9052,      5,      {0x74, 0x04, 0xf0, 0xd2, 0xaf} },
+{ 0x9057,      1,      {0x22} },
+{ 0x9058,      16,     {0x12, 0x8f, 0xf2, 0xe4, 0xf5, 0x5e, 0x74, 0x36, 0x25, 0x5e, 0xf8, 0xe6, 0x54, 0xf0, 0xf5, 0x5f} },
+{ 0x9068,      16,     {0x74, 0x63, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xe0, 0x65, 0x5f, 0xff, 0xc4} },
+{ 0x9078,      16,     {0x54, 0x0f, 0xf5, 0x60, 0x60, 0x22, 0x74, 0x63, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5} },
+{ 0x9088,      16,     {0x83, 0xe5, 0x5f, 0xf0, 0xaf, 0x5e, 0x7d, 0x01, 0xe5, 0x5f, 0x45, 0x60, 0xfb, 0x12, 0x8f, 0x20} },
+{ 0x9098,      16,     {0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2, 0x80, 0xec, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40} },
+{ 0x90a8,      16,     {0xb5, 0x12, 0x8f, 0xf2, 0xe5, 0x3a, 0x60, 0x48, 0xe4, 0xf5, 0x5e, 0xaf, 0x5e, 0x74, 0x01, 0xa8} },
+{ 0x90b8,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x55, 0x3a, 0x60, 0x29, 0xe5, 0x5e} },
+{ 0x90c8,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x30, 0xe6} },
+{ 0x90d8,      16,     {0x16, 0xaf, 0x5e, 0x7d, 0x04, 0x7b, 0x80, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2} },
+{ 0x90e8,      16,     {0x80, 0xef, 0xe5, 0x5f, 0xf4, 0x52, 0x3a, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0xbb} },
+{ 0x90f8,      16,     {0x90, 0x02, 0x9e, 0xe0, 0x60, 0x03, 0x02, 0x91, 0xc5, 0x74, 0x19, 0xf0, 0x7f, 0x02, 0x12, 0x81} },
+{ 0x9108,      16,     {0x11, 0x8e, 0x61, 0x8f, 0x62, 0xc3, 0xe5, 0x61, 0x64, 0x80, 0x94, 0x80, 0x40, 0xee, 0x90, 0x01} },
+{ 0x9118,      16,     {0x5b, 0xe0, 0x65, 0x62, 0xf0, 0x60, 0x37, 0xe4, 0xf5, 0x5e, 0xaf, 0x5e, 0x74, 0x01, 0xa8, 0x07} },
+{ 0x9128,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x90, 0x01, 0x5b, 0xe0, 0x55, 0x5f, 0x60} },
+{ 0x9138,      16,     {0x14, 0xaf, 0x5e, 0x7d, 0x08, 0xe5, 0x5f, 0x55, 0x62, 0xfb, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05} },
+{ 0x9148,      16,     {0x12, 0x8f, 0xf2, 0x80, 0xec, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0xcc, 0x90, 0x01} },
+{ 0x9158,      16,     {0x5b, 0xe5, 0x62, 0xf0, 0xe4, 0xf5, 0x5e, 0xc2, 0xaf, 0x74, 0x32, 0x25, 0x5e, 0xf8, 0xe6, 0xf5} },
+{ 0x9168,      16,     {0x5f, 0xe4, 0xf6, 0xd2, 0xaf, 0x53, 0x5f, 0x1e, 0xe5, 0x5f, 0x60, 0x11, 0xaf, 0x5e, 0x7d, 0x02} },
+{ 0x9178,      16,     {0xab, 0x5f, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2, 0x80, 0xef, 0x74, 0x2c, 0x25} },
+{ 0x9188,      16,     {0x5e, 0xf8, 0xe6, 0xf5, 0x5f, 0x74, 0x9a, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83} },
+{ 0x9198,      16,     {0xe0, 0x65, 0x5f, 0x60, 0x11, 0xaf, 0x5e, 0x7d, 0x04, 0xab, 0x5f, 0x12, 0x8f, 0x20, 0xef, 0x70} },
+{ 0x91a8,      16,     {0x05, 0x12, 0x8f, 0xf2, 0x80, 0xef, 0x74, 0x9a, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5} },
+{ 0x91b8,      16,     {0x83, 0xe5, 0x5f, 0xf0, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0x9a, 0x12, 0x8f, 0xf2} },
+{ 0x91c8,      1,      {0x22} },
+{ 0x91c9,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x6e, 0x02, 0x92, 0x10} },
+{ 0x91d5,      16,     {0x02, 0x05, 0x28, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2} },
+{ 0x91e5,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x33} },
+{ 0x91f5,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf} },
+{ 0x9205,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x92, 0x55, 0xe4, 0x7e} },
+{ 0x9215,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93} },
+{ 0x9225,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xa3} },
 { 0x9235,      16,     {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} },
-{ 0x9245,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xde} },
-{ 0x9255,      16,     {0x60, 0x24, 0x02, 0x28, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x81, 0x82, 0x84, 0x81} },
-{ 0x9265,      16,     {0x90, 0xa0, 0xc0, 0xc1, 0xc2, 0xc4, 0xc8, 0xd0, 0xe0, 0xe1, 0xe2, 0xe4, 0xe8, 0xf0, 0xf1, 0xe8} },
-{ 0x9275,      8,      {0xf4, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xfe, 0xfc} },
-{ 0x927d,      1,      {0x92} },
-{ 0x927e,      11,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0xd0} },
-{ 0x9289,      16,     {0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xfe, 0x30, 0xe0, 0x05, 0x90, 0x20, 0x02, 0xe0, 0xff, 0x02} },
-{ 0x9299,      16,     {0x30, 0xe1, 0x05, 0x90, 0x20, 0x0a, 0xe0, 0xff, 0xee, 0x30, 0xe2, 0x05, 0x90, 0x20, 0x12, 0x90} },
-{ 0x92a9,      16,     {0xff, 0xee, 0x30, 0xe3, 0x05, 0x90, 0x20, 0x1a, 0xe0, 0xff, 0x90, 0x01, 0x62, 0xe0, 0xb5, 0x62} },
-{ 0x92b9,      10,     {0x04, 0xe4, 0xf0, 0x80, 0x05, 0x90, 0x01, 0x62, 0xee, 0x01} },
-{ 0x92c3,      9,      {0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x92cc,      2,      {0xa9, 0xcc} },
-{ 0x92ce,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xab} },
-{ 0x92de,      16,     {0x6c, 0x45, 0x6d, 0xf5, 0x6e, 0xe9, 0x60, 0x14, 0x8a, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x24} },
-{ 0x92ee,      16,     {0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x4d, 0xf0, 0xe4, 0xfe, 0x80, 0x13, 0xeb, 0x24, 0x04, 0xeb} },
-{ 0x92fe,      16,     {0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0xff, 0xed, 0xf4, 0xfc, 0xef, 0x5c, 0xf0, 0xae, 0x6e, 0xf0} },
-{ 0x930e,      16,     {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0x55, 0x6e, 0xfc, 0xb5, 0x06, 0x03, 0xb5} },
-{ 0x931e,      16,     {0x05, 0x22, 0xe5, 0x6c, 0x5c, 0xfe, 0xe5, 0x6d, 0x5c, 0xfd, 0xe9, 0x60, 0x16, 0xee, 0x70, 0x16} },
-{ 0x932e,      16,     {0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xae, 0x07, 0xed, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x01} },
-{ 0x933e,      16,     {0x00, 0xad, 0x07, 0xee, 0x60, 0x03, 0xaf, 0x6c, 0x22, 0xed, 0x60, 0x03, 0xaf, 0x6d, 0x22, 0xaf} },
-{ 0x934e,      1,      {0x93} },
-{ 0x934f,      1,      {0x93} },
-{ 0x9350,      16,     {0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xf5, 0x66, 0xe4, 0x3e, 0xf5, 0x65, 0x75, 0x63, 0x65} },
-{ 0x9360,      16,     {0x75, 0x64, 0x4e, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x0f, 0xf0, 0x85, 0x64, 0x82, 0x85, 0x63, 0x82} },
-{ 0x9370,      16,     {0xe0, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xf0, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83, 0xa3, 0x63} },
-{ 0x9380,      16,     {0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xf0, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0x65} },
-{ 0x9390,      16,     {0x74, 0xff, 0xf0, 0xe5, 0x66, 0x24, 0x03, 0xf5, 0x68, 0xe4, 0x35, 0x65, 0xf5, 0x67, 0x85, 0xf5} },
-{ 0x93a0,      16,     {0x82, 0x85, 0x63, 0x83, 0xe0, 0x14, 0xb4, 0x0b, 0x00, 0x40, 0x03, 0x02, 0x98, 0x43, 0x90, 0x98} },
+{ 0x9245,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xbe} },
+{ 0x9255,      16,     {0x60, 0x24, 0x02, 0x28, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x81, 0x82, 0x84, 0x88} },
+{ 0x9265,      16,     {0x90, 0xa0, 0xc0, 0xc1, 0xc2, 0xc4, 0xc8, 0xd0, 0xe0, 0xe1, 0xe2, 0xe4, 0xe8, 0xf0, 0xf1, 0xf2} },
+{ 0x9275,      8,      {0xf4, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xfe, 0xff} },
+{ 0x927d,      1,      {0x00} },
+{ 0x927e,      11,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x18} },
+{ 0x9289,      16,     {0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xfe, 0x30, 0xe0, 0x05, 0x90, 0x20, 0x02, 0xe0, 0xff, 0xee} },
+{ 0x9299,      16,     {0x30, 0xe1, 0x05, 0x90, 0x20, 0x0a, 0xe0, 0xff, 0xee, 0x30, 0xe2, 0x05, 0x90, 0x20, 0x12, 0xe0} },
+{ 0x92a9,      16,     {0xff, 0xee, 0x30, 0xe3, 0x05, 0x90, 0x20, 0x1a, 0xe0, 0xff, 0x90, 0x01, 0x62, 0xe0, 0xb5, 0x1e} },
+{ 0x92b9,      10,     {0x04, 0xe4, 0xf0, 0x80, 0x05, 0x90, 0x01, 0x62, 0xee, 0xf0} },
+{ 0x92c3,      9,      {0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x92cc,      2,      {0xa9, 0x03} },
+{ 0x92ce,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xe5} },
+{ 0x92de,      16,     {0x6c, 0x45, 0x6d, 0xf5, 0x6e, 0xe9, 0x60, 0x14, 0x8a, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82} },
+{ 0x92ee,      16,     {0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x4d, 0xf0, 0xe4, 0xfe, 0x80, 0x13, 0xeb, 0x24, 0x04, 0xf5} },
+{ 0x92fe,      16,     {0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0xff, 0xed, 0xf4, 0xfc, 0xef, 0x5c, 0xf0, 0xae, 0x6e, 0xeb} },
+{ 0x930e,      16,     {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0x55, 0x6e, 0xfc, 0xb5, 0x06, 0x03, 0xaf} },
+{ 0x931e,      16,     {0x05, 0x22, 0xe5, 0x6c, 0x5c, 0xfe, 0xe5, 0x6d, 0x5c, 0xfd, 0xe9, 0x60, 0x16, 0xee, 0x70, 0x04} },
+{ 0x932e,      16,     {0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xae, 0x07, 0xed, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f} },
+{ 0x933e,      16,     {0x00, 0xad, 0x07, 0xee, 0x60, 0x03, 0xaf, 0x6c, 0x22, 0xed, 0x60, 0x03, 0xaf, 0x6d, 0x22, 0x7f} },
+{ 0x934e,      1,      {0x00} },
+{ 0x934f,      1,      {0x22} },
+{ 0x9350,      16,     {0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xf5, 0x66, 0xe4, 0x3e, 0xf5, 0x65, 0x75, 0x63, 0x02} },
+{ 0x9360,      16,     {0x75, 0x64, 0x4e, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x0f, 0xf0, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83} },
+{ 0x9370,      16,     {0xe0, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xf0, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83, 0xa3, 0xe0} },
+{ 0x9380,      16,     {0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xf0, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3} },
+{ 0x9390,      16,     {0x74, 0xff, 0xf0, 0xe5, 0x66, 0x24, 0x03, 0xf5, 0x68, 0xe4, 0x35, 0x65, 0xf5, 0x67, 0x85, 0x64} },
+{ 0x93a0,      16,     {0x82, 0x85, 0x63, 0x83, 0xe0, 0x14, 0xb4, 0x0b, 0x00, 0x40, 0x03, 0x02, 0x98, 0x43, 0x90, 0x93} },
 { 0x93b0,      16,     {0xb5, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x93, 0xd6, 0x02, 0x94, 0x7c, 0x02, 0x95, 0xba, 0x02, 0x95} },
-{ 0x93c0,      16,     {0xda, 0x02, 0x95, 0xda, 0x02, 0x96, 0x7f, 0x02, 0x96, 0xbd, 0x02, 0x96, 0xe4, 0x02, 0x97, 0xe4} },
-{ 0x93d0,      16,     {0x02, 0x97, 0xda, 0x02, 0x98, 0x0b, 0xe4, 0xf5, 0x5e, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0xf0} },
-{ 0x93e0,      16,     {0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xe4, 0xff, 0xe4, 0xe4} },
-{ 0x93f0,      16,     {0xef, 0x60, 0x10, 0x74, 0x28, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf4, 0x83} },
-{ 0x9400,      16,     {0x5f, 0x80, 0x0d, 0x74, 0x28, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf5, 0x83} },
-{ 0x9410,      16,     {0xe5, 0x62, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe5, 0x5f, 0xf0, 0xe0, 0x5f} },
-{ 0x9420,      16,     {0x60, 0x65, 0x5f, 0x60, 0x3d, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xa3} },
-{ 0x9430,      16,     {0x5e, 0x04, 0xfd, 0x05, 0x68, 0xe5, 0x68, 0xaa, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x67} },
-{ 0x9440,      16,     {0x8a, 0x83, 0xed, 0xf0, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0x05} },
-{ 0x9450,      16,     {0x82, 0x8c, 0x83, 0xe5, 0x5f, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0xe5, 0x60, 0xf0, 0xe5} },
-{ 0x9460,      16,     {0x98, 0x4e, 0x0e, 0xee, 0x64, 0x24, 0x70, 0x88, 0x0f, 0xef, 0x64, 0x02, 0x70, 0x80, 0x05, 0x70} },
-{ 0x9470,      16,     {0xe5, 0x5e, 0x64, 0x04, 0x60, 0x03, 0x02, 0x93, 0xd9, 0x02, 0x98, 0x4e, 0x7e, 0x20, 0x7f, 0x7e} },
-{ 0x9480,      16,     {0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe4, 0xf5, 0x5e, 0xaf, 0x62, 0xae, 0x61, 0xe4, 0xfd, 0x61} },
-{ 0x9490,      16,     {0x81, 0xe0, 0x74, 0x08, 0x25, 0x62, 0xf5, 0x62, 0xe4, 0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0x61} },
-{ 0x94a0,      16,     {0x5e, 0xd3, 0x94, 0x03, 0x40, 0xe3, 0x90, 0x00, 0x04, 0x74, 0x92, 0xf0, 0xa3, 0x74, 0x7e, 0xa3} },
-{ 0x94b0,      16,     {0xe4, 0xf5, 0x60, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xf5, 0x5e, 0x00} },
-{ 0x94c0,      16,     {0x5e, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x90, 0xf5} },
-{ 0x94d0,      16,     {0x62, 0xf0, 0x90, 0x01, 0x5e, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x85, 0x62, 0x82, 0x85, 0x62} },
-{ 0x94e0,      16,     {0x83, 0xa3, 0x74, 0x02, 0xf0, 0x90, 0x01, 0x62, 0xe0, 0x65, 0x5f, 0x70, 0x39, 0x90, 0x01, 0x39} },
-{ 0x94f0,      16,     {0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xee, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0x83} },
-{ 0x9500,      16,     {0xe5, 0x5e, 0x04, 0xff, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0x05} },
-{ 0x9510,      16,     {0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0x74, 0xff, 0xf0, 0xe4, 0xff} },
-{ 0x9520,      16,     {0x01, 0x62, 0xf0, 0x75, 0x60, 0xff, 0x90, 0x01, 0x62, 0xe0, 0xff, 0x60, 0x3c, 0x85, 0x66, 0x3c} },
-{ 0x9530,      16,     {0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5e, 0x04, 0xfe, 0x05, 0x68, 0xe5, 0x68, 0x68} },
-{ 0x9540,      16,     {0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xee, 0xf0, 0x05, 0x68, 0xe5, 0x05} },
-{ 0x9550,      16,     {0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0xf0} },
-{ 0x9560,      16,     {0x85, 0x67, 0x83, 0xe5, 0x5f, 0xf0, 0x75, 0x60, 0xff, 0xe5, 0x60, 0x70, 0x16, 0x74, 0x08, 0x16} },
-{ 0x9570,      16,     {0x62, 0xf5, 0x62, 0xe4, 0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5, 0x5e, 0x64, 0x04, 0x60, 0x64} },
-{ 0x9580,      16,     {0x02, 0x94, 0xbf, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe4, 0xf5, 0x00} },
-{ 0x9590,      16,     {0xaf, 0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0x74, 0x08, 0x25, 0x62, 0xf5, 0x62, 0x62} },
-{ 0x95a0,      16,     {0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x03, 0x40, 0xe3, 0x90, 0x00, 0xe3} },
-{ 0x95b0,      16,     {0x74, 0x13, 0xf0, 0xa3, 0x74, 0x12, 0xf0, 0x02, 0x98, 0x4e, 0x85, 0x64, 0x82, 0x85, 0x63, 0x82} },
-{ 0x95c0,      16,     {0xa3, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x33} },
-{ 0x95d0,      16,     {0x02, 0x95, 0xf0, 0x90, 0x01, 0x62, 0xf0, 0x02, 0x98, 0x4e, 0x90, 0x01, 0x5e, 0x74, 0x03, 0x5e} },
-{ 0x95e0,      16,     {0xa3, 0x74, 0xe8, 0xf0, 0xe4, 0xf5, 0x60, 0x90, 0x02, 0x95, 0xe0, 0xff, 0x90, 0x01, 0x62, 0x90} },
-{ 0x95f0,      16,     {0xb5, 0x07, 0x1e, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xea, 0x85, 0x66, 0xea} },
-{ 0x9600,      16,     {0x85, 0x65, 0x83, 0xa3, 0xa3, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0x74, 0xff, 0xf0, 0x74} },
-{ 0x9610,      16,     {0x60, 0xe5, 0x60, 0x60, 0x03, 0x02, 0x98, 0x4e, 0x90, 0x01, 0x5e, 0xf0, 0xa3, 0x74, 0x96, 0xa3} },
-{ 0x9620,      16,     {0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xf6, 0x7f, 0x02, 0x12, 0x81, 0x11, 0x12} },
-{ 0x9630,      16,     {0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xef, 0x54, 0x0f, 0xf5, 0x60, 0x90, 0x02, 0x95, 0x90} },
+{ 0x93c0,      16,     {0xda, 0x02, 0x95, 0xda, 0x02, 0x96, 0x7f, 0x02, 0x96, 0xbd, 0x02, 0x96, 0xe4, 0x02, 0x97, 0xa6} },
+{ 0x93d0,      16,     {0x02, 0x97, 0xda, 0x02, 0x98, 0x0b, 0xe4, 0xf5, 0x5e, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0x24} },
+{ 0x93e0,      16,     {0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xe4, 0xff, 0xe4, 0xfe} },
+{ 0x93f0,      16,     {0xef, 0x60, 0x10, 0x74, 0x28, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf4, 0xf5} },
+{ 0x9400,      16,     {0x5f, 0x80, 0x0d, 0x74, 0x28, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf5, 0x5f} },
+{ 0x9410,      16,     {0xe5, 0x62, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe5, 0x5f, 0xf0, 0xe0, 0xf5} },
+{ 0x9420,      16,     {0x60, 0x65, 0x5f, 0x60, 0x3d, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5} },
+{ 0x9430,      16,     {0x5e, 0x04, 0xfd, 0x05, 0x68, 0xe5, 0x68, 0xaa, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82} },
+{ 0x9440,      16,     {0x8a, 0x83, 0xed, 0xf0, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5} },
+{ 0x9450,      16,     {0x82, 0x8c, 0x83, 0xe5, 0x5f, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0xe5, 0x60, 0xf0, 0x02} },
+{ 0x9460,      16,     {0x98, 0x4e, 0x0e, 0xee, 0x64, 0x24, 0x70, 0x88, 0x0f, 0xef, 0x64, 0x02, 0x70, 0x80, 0x05, 0x5e} },
+{ 0x9470,      16,     {0xe5, 0x5e, 0x64, 0x04, 0x60, 0x03, 0x02, 0x93, 0xd9, 0x02, 0x98, 0x4e, 0x7e, 0x20, 0x7f, 0x00} },
+{ 0x9480,      16,     {0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe4, 0xf5, 0x5e, 0xaf, 0x62, 0xae, 0x61, 0xe4, 0xfd, 0x12} },
+{ 0x9490,      16,     {0x81, 0xe0, 0x74, 0x08, 0x25, 0x62, 0xf5, 0x62, 0xe4, 0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5} },
+{ 0x94a0,      16,     {0x5e, 0xd3, 0x94, 0x03, 0x40, 0xe3, 0x90, 0x00, 0x04, 0x74, 0x92, 0xf0, 0xa3, 0x74, 0x7e, 0xf0} },
+{ 0x94b0,      16,     {0xe4, 0xf5, 0x60, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xf5, 0x5e, 0xaf} },
+{ 0x94c0,      16,     {0x5e, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x90, 0x01} },
+{ 0x94d0,      16,     {0x62, 0xf0, 0x90, 0x01, 0x5e, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x85, 0x62, 0x82, 0x85, 0x61} },
+{ 0x94e0,      16,     {0x83, 0xa3, 0x74, 0x02, 0xf0, 0x90, 0x01, 0x62, 0xe0, 0x65, 0x5f, 0x70, 0x39, 0x90, 0x01, 0x5e} },
+{ 0x94f0,      16,     {0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xee, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xf0} },
+{ 0x9500,      16,     {0xe5, 0x5e, 0x04, 0xff, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5} },
+{ 0x9510,      16,     {0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0x74, 0xff, 0xf0, 0xe4, 0x90} },
+{ 0x9520,      16,     {0x01, 0x62, 0xf0, 0x75, 0x60, 0xff, 0x90, 0x01, 0x62, 0xe0, 0xff, 0x60, 0x3c, 0x85, 0x66, 0x82} },
+{ 0x9530,      16,     {0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5e, 0x04, 0xfe, 0x05, 0x68, 0xe5, 0x68, 0xac} },
+{ 0x9540,      16,     {0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xee, 0xf0, 0x05, 0x68, 0xe5, 0x68} },
+{ 0x9550,      16,     {0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82} },
+{ 0x9560,      16,     {0x85, 0x67, 0x83, 0xe5, 0x5f, 0xf0, 0x75, 0x60, 0xff, 0xe5, 0x60, 0x70, 0x16, 0x74, 0x08, 0x25} },
+{ 0x9570,      16,     {0x62, 0xf5, 0x62, 0xe4, 0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5, 0x5e, 0x64, 0x04, 0x60, 0x03} },
+{ 0x9580,      16,     {0x02, 0x94, 0xbf, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe4, 0xf5, 0x5e} },
+{ 0x9590,      16,     {0xaf, 0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0x74, 0x08, 0x25, 0x62, 0xf5, 0x62, 0xe4} },
+{ 0x95a0,      16,     {0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x03, 0x40, 0xe3, 0x90, 0x00, 0x04} },
+{ 0x95b0,      16,     {0x74, 0x13, 0xf0, 0xa3, 0x74, 0x12, 0xf0, 0x02, 0x98, 0x4e, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83} },
+{ 0x95c0,      16,     {0xa3, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x90} },
+{ 0x95d0,      16,     {0x02, 0x95, 0xf0, 0x90, 0x01, 0x62, 0xf0, 0x02, 0x98, 0x4e, 0x90, 0x01, 0x5e, 0x74, 0x03, 0xf0} },
+{ 0x95e0,      16,     {0xa3, 0x74, 0xe8, 0xf0, 0xe4, 0xf5, 0x60, 0x90, 0x02, 0x95, 0xe0, 0xff, 0x90, 0x01, 0x62, 0xe0} },
+{ 0x95f0,      16,     {0xb5, 0x07, 0x1e, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xea, 0x85, 0x66, 0x82} },
+{ 0x9600,      16,     {0x85, 0x65, 0x83, 0xa3, 0xa3, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0x74, 0xff, 0xf0, 0xf5} },
+{ 0x9610,      16,     {0x60, 0xe5, 0x60, 0x60, 0x03, 0x02, 0x98, 0x4e, 0x90, 0x01, 0x5e, 0xf0, 0xa3, 0x74, 0x96, 0xf0} },
+{ 0x9620,      16,     {0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xf6, 0x7f, 0x02, 0x12, 0x81, 0x11, 0xc3} },
+{ 0x9630,      16,     {0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xef, 0x54, 0x0f, 0xf5, 0x60, 0x90, 0x02, 0x95, 0xe0} },
 { 0x9640,      16,     {0x55, 0x60, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x8f, 0x5f, 0x85, 0x64, 0x82, 0x85} },
-{ 0x9650,      16,     {0x63, 0x83, 0xe0, 0xb4, 0x05, 0x0c, 0xe5, 0x5f, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x80} },
-{ 0x9660,      16,     {0x8f, 0x5f, 0xe5, 0x5f, 0x70, 0x03, 0x02, 0x98, 0x4e, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0x85} },
-{ 0x9670,      16,     {0xa3, 0xe4, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0xe5, 0x60, 0xf0, 0x02, 0x98, 0x4e, 0x02} },
-{ 0x9680,      16,     {0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xaf, 0x62, 0xae, 0x61, 0xe4, 0xfd, 0x61} },
-{ 0x9690,      16,     {0x81, 0xe0, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x44} },
-{ 0x96a0,      16,     {0x62, 0x82, 0x85, 0x61, 0x83, 0x74, 0x01, 0xf0, 0xa3, 0xe4, 0xf0, 0x85, 0x62, 0x82, 0x85, 0x62} },
-{ 0x96b0,      16,     {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xd2, 0x04, 0x02, 0x98, 0x4e, 0xc2, 0x04, 0x4e} },
-{ 0x96c0,      16,     {0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe5, 0x62, 0x24, 0x05, 0xf5, 0x82, 0x05} },
-{ 0x96d0,      16,     {0x35, 0x61, 0xf5, 0x83, 0xe0, 0x30, 0xe6, 0xf1, 0xaf, 0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x7d} },
-{ 0x96e0,      16,     {0xe0, 0x02, 0x98, 0x4e, 0xe4, 0xf5, 0x60, 0xf5, 0x5e, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0xf0} },
-{ 0x96f0,      16,     {0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xfe, 0xe4, 0xfd, 0xfe} },
-{ 0x9700,      16,     {0x81, 0xe0, 0xe5, 0x62, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe0, 0x54, 0x83} },
-{ 0x9710,      16,     {0xf0, 0xaf, 0x5e, 0x7d, 0x01, 0x7b, 0x01, 0x75, 0x6c, 0x80, 0x75, 0x6d, 0x40, 0x12, 0x92, 0x40} },
+{ 0x9650,      16,     {0x63, 0x83, 0xe0, 0xb4, 0x05, 0x0c, 0xe5, 0x5f, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00} },
+{ 0x9660,      16,     {0x8f, 0x5f, 0xe5, 0x5f, 0x70, 0x03, 0x02, 0x98, 0x4e, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3} },
+{ 0x9670,      16,     {0xa3, 0xe4, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0xe5, 0x60, 0xf0, 0x02, 0x98, 0x4e, 0x7e} },
+{ 0x9680,      16,     {0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xaf, 0x62, 0xae, 0x61, 0xe4, 0xfd, 0x12} },
+{ 0x9690,      16,     {0x81, 0xe0, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85} },
+{ 0x96a0,      16,     {0x62, 0x82, 0x85, 0x61, 0x83, 0x74, 0x01, 0xf0, 0xa3, 0xe4, 0xf0, 0x85, 0x62, 0x82, 0x85, 0x61} },
+{ 0x96b0,      16,     {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xd2, 0x04, 0x02, 0x98, 0x4e, 0xc2, 0x04, 0x7e} },
+{ 0x96c0,      16,     {0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe5, 0x62, 0x24, 0x05, 0xf5, 0x82, 0xe4} },
+{ 0x96d0,      16,     {0x35, 0x61, 0xf5, 0x83, 0xe0, 0x30, 0xe6, 0xf1, 0xaf, 0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x81} },
+{ 0x96e0,      16,     {0xe0, 0x02, 0x98, 0x4e, 0xe4, 0xf5, 0x60, 0xf5, 0x5e, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0x24} },
+{ 0x96f0,      16,     {0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xfe, 0xe4, 0xfd, 0x12} },
+{ 0x9700,      16,     {0x81, 0xe0, 0xe5, 0x62, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe0, 0x54, 0xfc} },
+{ 0x9710,      16,     {0xf0, 0xaf, 0x5e, 0x7d, 0x01, 0x7b, 0x01, 0x75, 0x6c, 0x80, 0x75, 0x6d, 0x40, 0x12, 0x92, 0xcc} },
 { 0x9720,      16,     {0x8f, 0x60, 0xe5, 0x60, 0x70, 0x11, 0xaf, 0x5e, 0x7d, 0x02, 0x7b, 0x01, 0x75, 0x6c, 0x10, 0x75} },
-{ 0x9730,      16,     {0x6d, 0x20, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xe5, 0x60, 0x70, 0x10, 0xaf, 0x5e, 0x7d, 0x01, 0x5e} },
-{ 0x9740,      16,     {0x75, 0x6c, 0x80, 0x75, 0x6d, 0x40, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xe5, 0x60, 0x70, 0x10, 0x60} },
-{ 0x9750,      16,     {0x5e, 0x7d, 0x02, 0xfb, 0x75, 0x6c, 0x10, 0x75, 0x6d, 0x20, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xcc} },
+{ 0x9730,      16,     {0x6d, 0x20, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xe5, 0x60, 0x70, 0x10, 0xaf, 0x5e, 0x7d, 0x01, 0xfb} },
+{ 0x9740,      16,     {0x75, 0x6c, 0x80, 0x75, 0x6d, 0x40, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xe5, 0x60, 0x70, 0x10, 0xaf} },
+{ 0x9750,      16,     {0x5e, 0x7d, 0x02, 0xfb, 0x75, 0x6c, 0x10, 0x75, 0x6d, 0x20, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xaf} },
 { 0x9760,      16,     {0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0xe5, 0x60, 0x60, 0x2b, 0x85, 0x66, 0x82, 0x85} },
-{ 0x9770,      16,     {0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5e, 0x04, 0xff, 0x05, 0x68, 0xe5, 0x68, 0xac, 0xe5} },
-{ 0x9780,      16,     {0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x68} },
-{ 0x9790,      16,     {0x83, 0xe5, 0x60, 0xf0, 0x02, 0x98, 0x4e, 0x05, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x03, 0x50, 0x94} },
-{ 0x97a0,      16,     {0x02, 0x96, 0xe9, 0x02, 0x98, 0x4e, 0xe4, 0x90, 0x02, 0xd3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xf0} },
-{ 0x97b0,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x98, 0xf0, 0xa3, 0x74, 0x6d, 0xf0, 0x74} },
-{ 0x97c0,      16,     {0x02, 0x7f, 0xd3, 0x12, 0x80, 0x00, 0xef, 0x64, 0x08, 0x70, 0x03, 0x02, 0x98, 0x4e, 0x85, 0x98} },
-{ 0x97d0,      16,     {0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0x80, 0x74, 0xe4, 0x90, 0x02, 0xd3, 0xf0, 0x02} },
-{ 0x97e0,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0xe5, 0x67, 0xf0, 0xe5} },
-{ 0x97f0,      16,     {0xe5, 0x68, 0xf0, 0x7e, 0x02, 0x7f, 0xd3, 0x12, 0x19, 0xc1, 0xef, 0x64, 0x08, 0x60, 0x4f, 0x08} },
-{ 0x9800,      16,     {0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0x80, 0x43, 0xe4, 0x90, 0x02, 0xd3, 0x90} },
-{ 0x9810,      16,     {0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xe5, 0x64, 0x24, 0xe5} },
-{ 0x9820,      16,     {0x90, 0x02, 0xda, 0xf0, 0xe4, 0x35, 0x63, 0x90, 0x02, 0xd9, 0xf0, 0x7e, 0x02, 0x7f, 0xd3, 0x02} },
-{ 0x9830,      16,     {0x80, 0x00, 0xef, 0x64, 0x08, 0x60, 0x17, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0x83} },
+{ 0x9770,      16,     {0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5e, 0x04, 0xff, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67} },
+{ 0x9780,      16,     {0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67} },
+{ 0x9790,      16,     {0x83, 0xe5, 0x60, 0xf0, 0x02, 0x98, 0x4e, 0x05, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x03, 0x50, 0x03} },
+{ 0x97a0,      16,     {0x02, 0x96, 0xe9, 0x02, 0x98, 0x4e, 0xe4, 0x90, 0x02, 0xd3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
+{ 0x97b0,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x98, 0xf0, 0xa3, 0x74, 0x6d, 0xf0, 0x7e} },
+{ 0x97c0,      16,     {0x02, 0x7f, 0xd3, 0x12, 0x80, 0x00, 0xef, 0x64, 0x08, 0x70, 0x03, 0x02, 0x98, 0x4e, 0x85, 0x66} },
+{ 0x97d0,      16,     {0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0x80, 0x74, 0xe4, 0x90, 0x02, 0xd3, 0xf0, 0xa3} },
+{ 0x97e0,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0xe5, 0x67, 0xf0, 0xa3} },
+{ 0x97f0,      16,     {0xe5, 0x68, 0xf0, 0x7e, 0x02, 0x7f, 0xd3, 0x12, 0x19, 0xc1, 0xef, 0x64, 0x08, 0x60, 0x4f, 0x85} },
+{ 0x9800,      16,     {0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0x80, 0x43, 0xe4, 0x90, 0x02, 0xd3, 0xf0} },
+{ 0x9810,      16,     {0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xe5, 0x64, 0x24, 0x02} },
+{ 0x9820,      16,     {0x90, 0x02, 0xda, 0xf0, 0xe4, 0x35, 0x63, 0x90, 0x02, 0xd9, 0xf0, 0x7e, 0x02, 0x7f, 0xd3, 0x12} },
+{ 0x9830,      16,     {0x80, 0x00, 0xef, 0x64, 0x08, 0x60, 0x17, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4} },
 { 0x9840,      16,     {0xf0, 0x80, 0x0b, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0x74, 0x01, 0xf0, 0x90, 0x01} },
-{ 0x9850,      16,     {0x5e, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x02} },
-{ 0x9860,      12,     {0xf6, 0x90, 0x7f, 0xc3, 0x74, 0x24, 0xf0, 0xe4, 0x90, 0x02, 0x4d, 0x90} },
-{ 0x986c,      1,      {0x98} },
-{ 0x986d,      16,     {0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf3} },
-{ 0x987d,      16,     {0xe4, 0xfd, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x05, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0x33} },
-{ 0x988d,      16,     {0xd8, 0xf9, 0xff, 0xe5, 0x3b, 0xfb, 0xe4, 0xef, 0x5b, 0x70, 0x03, 0x02, 0x99, 0x45, 0xed, 0x99} },
-{ 0x989d,      16,     {0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0xf5, 0x83, 0xfe} },
+{ 0x9850,      16,     {0x5e, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70} },
+{ 0x9860,      12,     {0xf6, 0x90, 0x7f, 0xc3, 0x74, 0x24, 0xf0, 0xe4, 0x90, 0x02, 0x4d, 0xf0} },
+{ 0x986c,      1,      {0x22} },
+{ 0x986d,      16,     {0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0} },
+{ 0x987d,      16,     {0xe4, 0xfd, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x05, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce} },
+{ 0x988d,      16,     {0xd8, 0xf9, 0xff, 0xe5, 0x3b, 0xfb, 0xe4, 0xef, 0x5b, 0x70, 0x03, 0x02, 0x99, 0x45, 0xed, 0x75} },
+{ 0x989d,      16,     {0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0xf5, 0x83, 0xe5} },
 { 0x98ad,      16,     {0x82, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0x60, 0x64, 0x60, 0x60} },
-{ 0x98bd,      16,     {0x03, 0x02, 0x99, 0x45, 0xef, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0xfc, 0x83} },
-{ 0x98cd,      16,     {0x36, 0x2d, 0xf8, 0xec, 0xf6, 0x30, 0xe5, 0x70, 0x74, 0x96, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x98dd,      16,     {0xf5, 0x83, 0xe0, 0x60, 0x63, 0xed, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xe4} },
-{ 0x98ed,      16,     {0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0, 0x8f, 0x83} },
-{ 0x98fd,      16,     {0x8e, 0x83, 0xf0, 0x74, 0x96, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x14, 0x83} },
-{ 0x990d,      16,     {0x70, 0x36, 0xed, 0x25, 0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf5} },
-{ 0x991d,      16,     {0xed, 0x25, 0xe0, 0xff, 0xc3, 0x74, 0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x24} },
-{ 0x992d,      16,     {0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x82, 0xfe, 0xed, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x993d,      16,     {0x02, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x0d, 0xed, 0x64, 0x04, 0x60, 0x03, 0x02, 0x60} },
-{ 0x994d,      1,      {0x99} },
-{ 0x994e,      1,      {0x99} },
-{ 0x994f,      16,     {0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0xdf} },
-{ 0x995f,      16,     {0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 0xf6, 0xe3} },
-{ 0x996f,      16,     {0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 0x8c, 0x88} },
-{ 0x997f,      16,     {0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf6, 0xe0} },
-{ 0x998f,      16,     {0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0xdf} },
-{ 0x999f,      16,     {0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 0x80, 0x80} },
-{ 0x99af,      16,     {0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 0x80, 0x80} },
-{ 0x99bf,      16,     {0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0xc8} },
-{ 0x99cf,      16,     {0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 0xe7, 0xe9} },
-{ 0x99df,      16,     {0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 0xa9, 0xec} },
-{ 0x99ef,      16,     {0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xc5} },
-{ 0x99ff,      16,     {0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xea, 0xcc} },
-{ 0x9a0f,      16,     {0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 0x80, 0xdf} },
-{ 0x9a1f,      16,     {0x88, 0xf0, 0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xc2, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xeb} },
+{ 0x98bd,      16,     {0x03, 0x02, 0x99, 0x45, 0xef, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0xfc, 0x74} },
+{ 0x98cd,      16,     {0x36, 0x2d, 0xf8, 0xec, 0xf6, 0x30, 0xe5, 0x70, 0x74, 0x96, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x02} },
+{ 0x98dd,      16,     {0xf5, 0x83, 0xe0, 0x60, 0x63, 0xed, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5} },
+{ 0x98ed,      16,     {0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0, 0x8f, 0x82} },
+{ 0x98fd,      16,     {0x8e, 0x83, 0xf0, 0x74, 0x96, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x14, 0xf0} },
+{ 0x990d,      16,     {0x70, 0x36, 0xed, 0x25, 0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0} },
+{ 0x991d,      16,     {0xed, 0x25, 0xe0, 0xff, 0xc3, 0x74, 0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82} },
+{ 0x992d,      16,     {0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x82, 0xfe, 0xed, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x993d,      16,     {0x02, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x0d, 0xed, 0x64, 0x04, 0x60, 0x03, 0x02, 0x98} },
+{ 0x994d,      1,      {0x7f} },
+{ 0x994e,      1,      {0x22} },
+{ 0x994f,      16,     {0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x3e} },
+{ 0x995f,      16,     {0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 0xf6, 0x08} },
+{ 0x996f,      16,     {0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 0x8c, 0x83} },
+{ 0x997f,      16,     {0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf6, 0x08} },
+{ 0x998f,      16,     {0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x4c} },
+{ 0x999f,      16,     {0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 0x80, 0x10} },
+{ 0x99af,      16,     {0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 0x80, 0x33} },
+{ 0x99bf,      16,     {0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83} },
+{ 0x99cf,      16,     {0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 0xe7, 0x80} },
+{ 0x99df,      16,     {0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 0xa9, 0xf0} },
+{ 0x99ef,      16,     {0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc} },
+{ 0x99ff,      16,     {0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xea, 0xde} },
+{ 0x9a0f,      16,     {0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 0x80, 0xcc} },
+{ 0x9a1f,      16,     {0x88, 0xf0, 0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xc2, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xb4} },
 { 0x9a2f,      16,     {0x04, 0x00, 0x50, 0xb8, 0x23, 0x23, 0x45, 0x82, 0xf5, 0x82, 0xef, 0x4e, 0x60, 0xae, 0xef, 0x60} },
-{ 0x9a3f,      9,      {0x01, 0x0e, 0xe5, 0x82, 0x23, 0x90, 0x99, 0x9f, 0x90} },
-{ 0x9a48,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x22} },
-{ 0x9a58,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x83} },
-{ 0x9a61,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x83} },
-{ 0x9a71,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x82} },
-{ 0x9a81,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x83} },
-{ 0x9a8e,      16,     {0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x15} },
-{ 0x9a9e,      6,      {0x15, 0x83, 0xe0, 0x38, 0xf0, 0xe0} },
-{ 0x9aa4,      16,     {0xa3, 0xf8, 0xe0, 0xc5, 0xf0, 0x25, 0xf0, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x70} },
-{ 0x9ab4,      6,      {0xe0, 0xc8, 0x38, 0xf0, 0xe8, 0x38} },
-{ 0x9aba,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0x83} },
-{ 0x9aca,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xe6} },
+{ 0x9a3f,      9,      {0x01, 0x0e, 0xe5, 0x82, 0x23, 0x90, 0x99, 0x9f, 0x73} },
+{ 0x9a48,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02} },
+{ 0x9a58,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x9a61,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x50} },
+{ 0x9a71,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x22} },
+{ 0x9a81,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x9a8e,      16,     {0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02} },
+{ 0x9a9e,      6,      {0x15, 0x83, 0xe0, 0x38, 0xf0, 0x22} },
+{ 0x9aa4,      16,     {0xa3, 0xf8, 0xe0, 0xc5, 0xf0, 0x25, 0xf0, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83} },
+{ 0x9ab4,      6,      {0xe0, 0xc8, 0x38, 0xf0, 0xe8, 0x22} },
+{ 0x9aba,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0} },
+{ 0x9aca,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe} },
 { 0x9ada,      16,     {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} },
-{ 0x9aea,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0xa3} },
-{ 0x9af2,      16,     {0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcd} },
-{ 0x9b02,      16,     {0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a, 0xec, 0x99, 0xe5, 0x82, 0x98, 0xe5} },
-{ 0x9b12,      16,     {0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec, 0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0x0f} },
-{ 0x9b22,      16,     {0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8, 0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb8} },
-{ 0x9b32,      16,     {0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf, 0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xfc} },
-{ 0x9b42,      16,     {0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xec} },
-{ 0x9b52,      16,     {0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99, 0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xd8} },
-{ 0x9b62,      16,     {0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfd} },
-{ 0x9b72,      16,     {0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40, 0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9b} },
-{ 0x9b82,      16,     {0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb, 0x22, 0x75, 0xf0, 0x10, 0xef, 0xf0} },
-{ 0x9b92,      16,     {0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc, 0xc8, 0x33, 0xc8, 0x10, 0xd7, 0xc8} },
-{ 0x9ba2,      16,     {0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd, 0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xfc} },
-{ 0x9bb2,      14,     {0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa, 0xe4, 0xc8, 0xf9, 0xe4} },
-{ 0x9bc0,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xe8} },
-{ 0x9bd0,      1,      {0x9b} },
-{ 0x9bd1,      16,     {0xe8, 0x60, 0x0f, 0xec, 0xc3, 0x13, 0xfc, 0xed, 0x13, 0xfd, 0xee, 0x13, 0xfe, 0xef, 0x13, 0xfe} },
-{ 0x9be1,      3,      {0xd8, 0xf1, 0x00} },
-{ 0x9be4,      16,     {0x08, 0x08, 0x08, 0xe6, 0xcf, 0x2f, 0xf6, 0x18, 0xe6, 0xce, 0x3e, 0xf6, 0x18, 0xe6, 0xcd, 0x18} },
-{ 0x9bf4,      7,      {0xf6, 0x18, 0xe6, 0xcc, 0x3c, 0xf6, 0xcc} },
-{ 0x9bfb,      12,     {0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xa3, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xa3} },
+{ 0x9aea,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22} },
+{ 0x9af2,      16,     {0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcc} },
+{ 0x9b02,      16,     {0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a, 0xec, 0x99, 0xe5, 0x82, 0x98, 0x40} },
+{ 0x9b12,      16,     {0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec, 0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0xd6} },
+{ 0x9b22,      16,     {0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8, 0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb9} },
+{ 0x9b32,      16,     {0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf, 0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xcb} },
+{ 0x9b42,      16,     {0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xeb} },
+{ 0x9b52,      16,     {0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99, 0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xf9} },
+{ 0x9b62,      16,     {0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc} },
+{ 0x9b72,      16,     {0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40, 0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9a} },
+{ 0x9b82,      16,     {0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb, 0x22, 0x75, 0xf0, 0x10, 0xef, 0x2f} },
+{ 0x9b92,      16,     {0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc, 0xc8, 0x33, 0xc8, 0x10, 0xd7, 0x07} },
+{ 0x9ba2,      16,     {0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd, 0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xf8} },
+{ 0x9bb2,      14,     {0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa, 0xe4, 0xc8, 0xf9, 0x22} },
+{ 0x9bc0,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0} },
+{ 0x9bd0,      1,      {0x22} },
+{ 0x9bd1,      16,     {0xe8, 0x60, 0x0f, 0xec, 0xc3, 0x13, 0xfc, 0xed, 0x13, 0xfd, 0xee, 0x13, 0xfe, 0xef, 0x13, 0xff} },
+{ 0x9be1,      3,      {0xd8, 0xf1, 0x22} },
+{ 0x9be4,      16,     {0x08, 0x08, 0x08, 0xe6, 0xcf, 0x2f, 0xf6, 0x18, 0xe6, 0xce, 0x3e, 0xf6, 0x18, 0xe6, 0xcd, 0x3d} },
+{ 0x9bf4,      7,      {0xf6, 0x18, 0xe6, 0xcc, 0x3c, 0xf6, 0x22} },
+{ 0x9bfb,      12,     {0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xa3, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22} },
 { 0x9c07,      16,     {0xa8, 0x82, 0x85, 0x83, 0xf0, 0xd0, 0x83, 0xd0, 0x82, 0x12, 0x9c, 0x1e, 0x12, 0x9c, 0x1e, 0x12} },
-{ 0x9c17,      16,     {0x9c, 0x1e, 0x12, 0x9c, 0x1e, 0xe4, 0x73, 0xe4, 0x93, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0xc5} },
+{ 0x9c17,      16,     {0x9c, 0x1e, 0x12, 0x9c, 0x1e, 0xe4, 0x73, 0xe4, 0x93, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83} },
 { 0x9c27,      16,     {0xc8, 0xc5, 0x82, 0xc8, 0xf0, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83, 0xc8, 0xc5, 0x82, 0xc8} },
-{ 0x9c37,      1,      {0x9c} },
+{ 0x9c37,      1,      {0x22} },
 { 0xffff,      0,      {0x00} }
 };
 
+#ifdef DEBUG
+static const struct whiteheat_hex_record whiteheat_loader[] = {
+{ 0x0000,      3,      {0x02, 0x09, 0x8d} },
+{ 0x0033,      3,      {0x02, 0x0e, 0x70} },
+{ 0x0043,      3,      {0x02, 0x0b, 0x00} },
+{ 0x004b,      3,      {0x02, 0x05, 0xb3} },
+{ 0x0100,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x54, 0x10, 0xff, 0xc4, 0x54, 0x0f, 0x44, 0x50, 0xf5, 0x0f, 0x13, 0xe4} },
+{ 0x0110,      16,     {0x33, 0xf5, 0x11, 0x90, 0x7f, 0xe9, 0xe0, 0x24, 0x5e, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x03} },
+{ 0x0120,      16,     {0x7c, 0x90, 0x01, 0x28, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x01, 0xbc, 0x02, 0x01, 0xbc, 0x02, 0x01} },
+{ 0x0130,      16,     {0x91, 0x02, 0x01, 0x3d, 0x02, 0x01, 0x53, 0x02, 0x01, 0x6f, 0x02, 0x01, 0x9a, 0x90, 0x7f, 0x00} },
+{ 0x0140,      16,     {0xe5, 0x11, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0} },
+{ 0x0150,      16,     {0x02, 0x03, 0x7c, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x90, 0x7f, 0x00, 0xf0, 0x90} },
+{ 0x0160,      16,     {0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x03, 0x7c, 0x12} },
+{ 0x0170,      16,     {0x0a, 0x89, 0x50, 0x07, 0xe4, 0x90, 0x7f, 0x00, 0xf0, 0x80, 0x06, 0x90, 0x7f, 0x00, 0x74, 0x0f} },
+{ 0x0180,      16,     {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x03} },
+{ 0x0190,      16,     {0x7c, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0f, 0x02, 0x03, 0x7c, 0x90, 0x7f, 0x00, 0x74, 0x07, 0xf0} },
+{ 0x01a0,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0xe8, 0x7e} },
+{ 0x01b0,      16,     {0x03, 0x12, 0x0d, 0xd5, 0xd2, 0x06, 0x12, 0x0d, 0x0d, 0x02, 0x03, 0x7c, 0x90, 0x7f, 0xea, 0xe0} },
+{ 0x01c0,      16,     {0x75, 0x29, 0x00, 0xf5, 0x2a, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x29, 0x90, 0x7f, 0xee, 0xe0} },
+{ 0x01d0,      16,     {0x75, 0x2b, 0x00, 0xf5, 0x2c, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x2b, 0x90, 0x7f, 0xe8, 0xe0} },
+{ 0x01e0,      16,     {0x64, 0xc0, 0x60, 0x03, 0x02, 0x02, 0xc9, 0xe5, 0x2c, 0x45, 0x2b, 0x70, 0x03, 0x02, 0x03, 0x7c} },
+{ 0x01f0,      16,     {0xc3, 0xe5, 0x2c, 0x94, 0x40, 0xe5, 0x2b, 0x94, 0x00, 0x50, 0x08, 0x85, 0x2b, 0x2d, 0x85, 0x2c} },
+{ 0x0200,      16,     {0x2e, 0x80, 0x06, 0x75, 0x2d, 0x00, 0x75, 0x2e, 0x40, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0x70} },
+{ 0x0210,      16,     {0x34, 0xf5, 0x31, 0xf5, 0x32, 0xc3, 0xe5, 0x32, 0x95, 0x2e, 0xe5, 0x31, 0x95, 0x2d, 0x50, 0x5c} },
+{ 0x0220,      16,     {0xe5, 0x2a, 0x25, 0x32, 0xf5, 0x82, 0xe5, 0x31, 0x35, 0x29, 0xf5, 0x83, 0xe0, 0xff, 0x74, 0x00} },
+{ 0x0230,      16,     {0x25, 0x32, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x05, 0x32, 0xe5, 0x32, 0x70} },
+{ 0x0240,      16,     {0x02, 0x05, 0x31, 0x80, 0xd0, 0xe4, 0xf5, 0x31, 0xf5, 0x32, 0xc3, 0xe5, 0x32, 0x95, 0x2e, 0xe5} },
+{ 0x0250,      16,     {0x31, 0x95, 0x2d, 0x50, 0x18, 0x74, 0x00, 0x25, 0x32, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83} },
+{ 0x0260,      16,     {0x74, 0xcd, 0xf0, 0x05, 0x32, 0xe5, 0x32, 0x70, 0x02, 0x05, 0x31, 0x80, 0xdd, 0xaf, 0x2a, 0xae} },
+{ 0x0270,      16,     {0x29, 0xad, 0x2e, 0x7a, 0x7f, 0x79, 0x00, 0x7b, 0x00, 0x12, 0x0b, 0xf4, 0x90, 0x7f, 0xb5, 0xe5} },
+{ 0x0280,      16,     {0x2e, 0xf0, 0xe5, 0x2e, 0x25, 0x2a, 0xf5, 0x2a, 0xe5, 0x2d, 0x35, 0x29, 0xf5, 0x29, 0xc3, 0xe5} },
+{ 0x0290,      16,     {0x2c, 0x95, 0x2e, 0xf5, 0x2c, 0xe5, 0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0x90, 0x7f, 0x92, 0xe0, 0xff} },
+{ 0x02a0,      16,     {0xc4, 0x54, 0x0f, 0x75, 0x2f, 0x00, 0xf5, 0x30, 0xd3, 0x94, 0x00, 0xe5, 0x2f, 0x94, 0x00, 0x50} },
+{ 0x02b0,      16,     {0x0c, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe1, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xb4} },
+{ 0x02c0,      16,     {0xe0, 0x20, 0xe2, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xe8, 0xe0, 0x64, 0x40, 0x60} },
+{ 0x02d0,      16,     {0x03, 0x02, 0x03, 0x7c, 0xe5, 0x2c, 0x45, 0x2b, 0x70, 0x03, 0x02, 0x03, 0x7c, 0xe4, 0x90, 0x7f} },
+{ 0x02e0,      16,     {0xc5, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x75, 0x2f, 0x00, 0xf5, 0x30, 0xd3} },
+{ 0x02f0,      16,     {0x94, 0x00, 0xe5, 0x2f, 0x94, 0x00, 0x50, 0x09, 0x90, 0x7f, 0xc4, 0xe0, 0x30, 0xe1, 0x09, 0x80} },
+{ 0x0300,      16,     {0xf7, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe3, 0xf9, 0x90, 0x7f, 0xc5, 0xe0, 0x75, 0x2d, 0x00, 0xf5} },
+{ 0x0310,      16,     {0x2e, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0x70, 0x38, 0x90, 0x20, 0x6b, 0xf0, 0xf5, 0x31, 0xf5} },
+{ 0x0320,      16,     {0x32, 0xc3, 0xe5, 0x32, 0x95, 0x2e, 0xe5, 0x31, 0x95, 0x2d, 0x50, 0x34, 0x74, 0xc0, 0x25, 0x32} },
+{ 0x0330,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x7e, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x2a, 0x25, 0x32, 0xf5, 0x82, 0xe5} },
+{ 0x0340,      16,     {0x31, 0x35, 0x29, 0xf5, 0x83, 0xef, 0xf0, 0x05, 0x32, 0xe5, 0x32, 0x70, 0x02, 0x05, 0x31, 0x80} },
+{ 0x0350,      16,     {0xd0, 0xaf, 0x2a, 0xae, 0x29, 0xad, 0x2e, 0x7a, 0x7e, 0x79, 0xc0, 0x7b, 0xc0, 0x12, 0x0c, 0x80} },
+{ 0x0360,      16,     {0xe5, 0x2e, 0x25, 0x2a, 0xf5, 0x2a, 0xe5, 0x2d, 0x35, 0x29, 0xf5, 0x29, 0xc3, 0xe5, 0x2c, 0x95} },
+{ 0x0370,      13,     {0x2e, 0xf5, 0x2c, 0xe5, 0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0x02, 0x02, 0xd4, 0xc3} },
+{ 0x037d,      1,      {0x22} },
+{ 0x037e,      16,     {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x56, 0x14, 0x70, 0x03, 0x02, 0x04, 0xd2, 0x24} },
+{ 0x038e,      16,     {0xfe, 0x70, 0x03, 0x02, 0x05, 0x46, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x04, 0x50, 0x14, 0x70, 0x03} },
+{ 0x039e,      16,     {0x02, 0x04, 0x4a, 0x14, 0x70, 0x03, 0x02, 0x04, 0x3e, 0x14, 0x70, 0x03, 0x02, 0x04, 0x44, 0x24} },
+{ 0x03ae,      16,     {0x05, 0x60, 0x03, 0x02, 0x05, 0x9a, 0x12, 0x0e, 0x7b, 0x40, 0x03, 0x02, 0x05, 0xab, 0x90, 0x7f} },
+{ 0x03be,      16,     {0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60, 0x40, 0x24, 0x02, 0x70, 0x69, 0x74, 0x11, 0x90} },
+{ 0x03ce,      16,     {0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xea, 0xe0} },
+{ 0x03de,      16,     {0xff, 0x12, 0x0b, 0x58, 0x8b, 0x26, 0x8a, 0x27, 0x89, 0x28, 0xea, 0x49, 0x60, 0x11, 0xae, 0x02} },
+{ 0x03ee,      16,     {0xee, 0x90, 0x7f, 0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xab, 0x90} },
+{ 0x03fe,      16,     {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x0c} },
+{ 0x040e,      16,     {0x3f, 0x8b, 0x26, 0x8a, 0x27, 0x89, 0x28, 0xea, 0x49, 0x60, 0x11, 0xae, 0x02, 0xee, 0x90, 0x7f} },
+{ 0x041e,      16,     {0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xb4, 0xe0} },
+{ 0x042e,      16,     {0x44, 0x01, 0xf0, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xab} },
+{ 0x043e,      16,     {0x12, 0x0e, 0x52, 0x02, 0x05, 0xab, 0x12, 0x0e, 0x60, 0x02, 0x05, 0xab, 0x12, 0x0a, 0xf7, 0x02} },
+{ 0x044e,      16,     {0x05, 0xab, 0x12, 0x08, 0xf1, 0x02, 0x05, 0xab, 0x12, 0x0e, 0x7d, 0x40, 0x03, 0x02, 0x05, 0xab} },
+{ 0x045e,      16,     {0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02, 0x70, 0x5b, 0xa2} },
+{ 0x046e,      16,     {0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x02, 0xe4, 0x33, 0x4f, 0x90, 0x7f, 0x00, 0xf0} },
+{ 0x047e,      16,     {0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xab, 0xe4, 0x90, 0x7f, 0x00} },
+{ 0x048e,      16,     {0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xec, 0xe0} },
+{ 0x049e,      16,     {0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4} },
+{ 0x04ae,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0x90, 0x7f, 0x00, 0xf0, 0xe4, 0xa3} },
+{ 0x04be,      16,     {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01} },
+{ 0x04ce,      16,     {0xf0, 0x02, 0x05, 0xab, 0x12, 0x0e, 0x7f, 0x40, 0x03, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xe8, 0xe0} },
+{ 0x04de,      16,     {0x24, 0xfe, 0x60, 0x1d, 0x24, 0x02, 0x60, 0x03, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xea, 0xe0, 0xb4} },
+{ 0x04ee,      16,     {0x01, 0x05, 0xc2, 0x00, 0x02, 0x05, 0xab, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05} },
+{ 0x04fe,      16,     {0xab, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0x38, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4} },
+{ 0x050e,      16,     {0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f} },
+{ 0x051e,      16,     {0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x7f, 0xec, 0xe0, 0x54, 0x80, 0xff, 0x13, 0x13, 0x13, 0x54, 0x1f} },
+{ 0x052e,      16,     {0xff, 0xe0, 0x54, 0x07, 0x2f, 0x90, 0x7f, 0xd7, 0xf0, 0xe0, 0x44, 0x20, 0xf0, 0x80, 0x6e, 0x90} },
+{ 0x053e,      16,     {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x65, 0x12, 0x0e, 0x81, 0x50, 0x60, 0x90, 0x7f, 0xe8} },
+{ 0x054e,      16,     {0xe0, 0x24, 0xfe, 0x60, 0x18, 0x24, 0x02, 0x70, 0x54, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x04} },
+{ 0x055e,      16,     {0xd2, 0x00, 0x80, 0x49, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x40, 0x90, 0x7f, 0xea} },
+{ 0x056e,      16,     {0xe0, 0x70, 0x20, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0} },
+{ 0x057e,      16,     {0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01} },
+{ 0x058e,      16,     {0xf0, 0x80, 0x1a, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x11, 0xe4, 0x90, 0x20, 0x6a} },
+{ 0x059e,      16,     {0xf0, 0x12, 0x01, 0x00, 0x50, 0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xb4} },
+{ 0x05ae,      4,      {0xe0, 0x44, 0x02, 0xf0} },
+{ 0x05b2,      1,      {0x22} },
+{ 0x05b3,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
+{ 0x05c3,      16,     {0xd0, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x7f, 0xa5} },
+{ 0x05d3,      16,     {0xe0, 0x30, 0xe2, 0x06, 0x75, 0x0d, 0x06, 0x02, 0x06, 0x7f, 0x90, 0x7f, 0xa5, 0xe0, 0x20, 0xe1} },
+{ 0x05e3,      16,     {0x0c, 0xe5, 0x0d, 0x64, 0x02, 0x60, 0x06, 0x75, 0x0d, 0x07, 0x02, 0x06, 0x7f, 0xaf, 0x0d, 0xef} },
+{ 0x05f3,      16,     {0x24, 0xfe, 0x60, 0x48, 0x14, 0x60, 0x2c, 0x24, 0xfe, 0x60, 0x77, 0x24, 0x04, 0x60, 0x03, 0x02} },
+{ 0x0603,      16,     {0x06, 0x7f, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xaf, 0x0c, 0x05, 0x0c, 0x8f, 0x82, 0x75, 0x83} },
+{ 0x0613,      16,     {0x00, 0x12, 0x07, 0x85, 0x90, 0x7f, 0xa6, 0xf0, 0xe5, 0x0c, 0x65, 0x08, 0x70, 0x5e, 0x75, 0x0d} },
+{ 0x0623,      16,     {0x05, 0x80, 0x59, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x8e} },
+{ 0x0633,      16,     {0x82, 0x75, 0x83, 0x00, 0x12, 0x07, 0xb2, 0x75, 0x0d, 0x02, 0x80, 0x40, 0xe5, 0x08, 0x24, 0xfe} },
+{ 0x0643,      16,     {0xb5, 0x0c, 0x07, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0xe5, 0x08, 0x14, 0xb5, 0x0c, 0x0a} },
+{ 0x0653,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0x09} },
+{ 0x0663,      16,     {0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x8e, 0x82, 0x75, 0x83, 0x00, 0x12, 0x07, 0xb2, 0x05, 0x0c} },
+{ 0x0673,      16,     {0x80, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x53, 0x91, 0xdf, 0xd0} },
+{ 0x0683,      16,     {0x07, 0xd0, 0x06, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x86, 0xd0} },
+{ 0x0693,      10,     {0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x069d,      16,     {0xc2, 0x04, 0xd2, 0x05, 0xe4, 0xf5, 0x25, 0xc2, 0x03, 0xc2, 0x00, 0xc2, 0x02, 0xc2, 0x01, 0x12} },
+{ 0x06ad,      16,     {0x0e, 0x74, 0xd2, 0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xa9} },
+{ 0x06bd,      16,     {0xf0, 0x90, 0x7f, 0xaa, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0x90} },
+{ 0x06cd,      16,     {0x7f, 0x93, 0x74, 0x30, 0xf0, 0x12, 0x0a, 0x19, 0x75, 0x24, 0x48, 0x75, 0x23, 0x92, 0x75, 0x22} },
+{ 0x06dd,      16,     {0x00, 0x75, 0x21, 0x00, 0xe4, 0xff, 0xfe, 0x7e, 0x05, 0x90, 0x20, 0x68, 0x74, 0x01, 0xf0, 0xa3} },
+{ 0x06ed,      16,     {0xde, 0xfc, 0x7e, 0x00, 0x7f, 0x05, 0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae} },
+{ 0x06fd,      16,     {0xe0, 0x44, 0x0d, 0xf0, 0xd2, 0xaf, 0x12, 0x0e, 0x68, 0x30, 0x01, 0x0a, 0xe4, 0x90, 0x20, 0x69} },
+{ 0x070d,      16,     {0xf0, 0x12, 0x03, 0x7e, 0xc2, 0x01, 0x30, 0x04, 0x1a, 0x12, 0x0e, 0x77, 0x50, 0x13, 0x12, 0x09} },
+{ 0x071d,      16,     {0x00, 0x30, 0x00, 0x07, 0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0xf3, 0x12, 0x0d, 0x8b, 0x12, 0x0e} },
+{ 0x072d,      16,     {0x79, 0xc2, 0x03, 0x7f, 0xff, 0x7e, 0xff, 0x7d, 0xff, 0x7c, 0xff, 0x78, 0x21, 0x12, 0x08, 0x1d} },
+{ 0x073d,      16,     {0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x08, 0x0c, 0x70, 0x1b, 0x75, 0x24} },
+{ 0x074d,      16,     {0x48, 0x75, 0x23, 0x92, 0xf5, 0x22, 0xf5, 0x21, 0x63, 0x25, 0xff, 0x90, 0x20, 0x68, 0xe5, 0x25} },
+{ 0x075d,      14,     {0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0x12, 0x08, 0xff, 0x80, 0x9b} },
+{ 0x076b,      1,      {0x22} },
+{ 0x076c,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02} },
+{ 0x077c,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x0785,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x50} },
+{ 0x0795,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x22} },
+{ 0x07a5,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x07b2,      16,     {0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf0} },
+{ 0x07c2,      16,     {0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb, 0xfe, 0x05, 0xe9, 0x25, 0x82, 0xc8} },
+{ 0x07d2,      2,      {0xf2, 0x22} },
+{ 0x07d4,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0} },
+{ 0x07e4,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe} },
+{ 0x07f4,      16,     {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} },
+{ 0x0804,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22} },
+{ 0x080c,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0} },
+{ 0x081c,      1,      {0x22} },
+{ 0x081d,      16,     {0x08, 0x08, 0x08, 0xe6, 0x2f, 0xff, 0xf6, 0x18, 0xe6, 0x3e, 0xfe, 0xf6, 0x18, 0xe6, 0x3d, 0xfd} },
+{ 0x082d,      7,      {0xf6, 0x18, 0xe6, 0x3c, 0xfc, 0xf6, 0x22} },
+{ 0x0834,      4,      {0x8c, 0x34, 0x8d, 0x35} },
+{ 0x0838,      16,     {0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0xe4, 0xf5, 0x36, 0xf5, 0x37, 0xc3, 0xe5, 0x37, 0x95} },
+{ 0x0848,      16,     {0x35, 0xe5, 0x36, 0x95, 0x34, 0x50, 0x69, 0xef, 0x25, 0x37, 0xf5, 0x82, 0xe5, 0x36, 0x3e, 0xf5} },
+{ 0x0858,      16,     {0x83, 0x74, 0xff, 0xf0, 0xf4, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x37, 0xf5, 0x82, 0xe5, 0x36} },
+{ 0x0868,      16,     {0x3e, 0xf5, 0x83, 0xe4, 0xf0, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x37, 0xf5, 0x82, 0xe5, 0x36} },
+{ 0x0878,      16,     {0x3e, 0xf5, 0x83, 0x74, 0xaa, 0xf0, 0x64, 0xaa, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x37, 0xf5} },
+{ 0x0888,      16,     {0x82, 0xe5, 0x36, 0x3e, 0xf5, 0x83, 0x74, 0x55, 0xf0, 0x64, 0x55, 0x60, 0x02, 0xc3, 0x22, 0xad} },
+{ 0x0898,      16,     {0x37, 0xe5, 0x37, 0x2f, 0xf5, 0x82, 0xe5, 0x36, 0x3e, 0xf5, 0x83, 0xed, 0xf0, 0xfc, 0xac, 0x05} },
+{ 0x08a8,      16,     {0xed, 0x6c, 0x60, 0x02, 0xc3, 0x22, 0x05, 0x37, 0xe5, 0x37, 0x70, 0x02, 0x05, 0x36, 0x80, 0x8c} },
+{ 0x08b8,      16,     {0xe4, 0xf5, 0x36, 0xf5, 0x37, 0xc3, 0xe5, 0x37, 0x95, 0x35, 0xe5, 0x36, 0x95, 0x34, 0x50, 0x27} },
+{ 0x08c8,      16,     {0xef, 0x25, 0x37, 0xf5, 0x82, 0xe5, 0x36, 0x3e, 0xf5, 0x83, 0xe0, 0x65, 0x37, 0x60, 0x02, 0xc3} },
+{ 0x08d8,      16,     {0x22, 0xef, 0x25, 0x37, 0xf5, 0x82, 0xe5, 0x36, 0x3e, 0xf5, 0x83, 0xe4, 0xf0, 0x05, 0x37, 0xe5} },
+{ 0x08e8,      8,      {0x37, 0x70, 0x02, 0x05, 0x36, 0x80, 0xce, 0xd3} },
+{ 0x08f0,      1,      {0x22} },
+{ 0x08f1,      14,     {0x90, 0x7f, 0x00, 0xe5, 0x10, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x22} },
+{ 0x08ff,      1,      {0x22} },
+{ 0x0900,      9,      {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x74} },
+{ 0x097d,      16,     {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22} },
+{ 0x098d,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x3a, 0x02, 0x09, 0xd4} },
+{ 0x0999,      16,     {0x02, 0x06, 0x9d, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2} },
+{ 0x09a9,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x33} },
+{ 0x09b9,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf} },
+{ 0x09c9,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x0e, 0x2d, 0xe4, 0x7e} },
+{ 0x09d9,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93} },
+{ 0x09e9,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xa3} },
+{ 0x09f9,      16,     {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} },
+{ 0x0a09,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xbe} },
+{ 0x0a19,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x0d, 0xd5, 0x90, 0x7f, 0x96, 0x74, 0x89} },
+{ 0x0a29,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x0d, 0xd5, 0x90, 0x7f} },
+{ 0x0a39,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0xd5, 0x7f, 0x05, 0x7e, 0x00} },
+{ 0x0a49,      16,     {0x12, 0x0d, 0xd5, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02, 0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05} },
+{ 0x0a59,      16,     {0x7e, 0x00, 0x12, 0x0d, 0xd5, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00} },
+{ 0x0a69,      16,     {0x12, 0x0d, 0xd5, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x0d} },
+{ 0x0a79,      16,     {0xd5, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x0d, 0xd5, 0x22} },
+{ 0x0a89,      16,     {0x75, 0x33, 0x01, 0xe5, 0x33, 0x60, 0x1b, 0x7f, 0x01, 0x12, 0x0e, 0x18, 0x7f, 0x00, 0x7e, 0x0e} },
+{ 0x0a99,      16,     {0x7d, 0x00, 0x7c, 0x01, 0x12, 0x08, 0x34, 0xe4, 0x33, 0xf5, 0x33, 0x70, 0x05, 0x7f, 0x0f, 0x12} },
+{ 0x0aa9,      16,     {0x0e, 0x18, 0xe5, 0x33, 0x60, 0x1b, 0x7f, 0x02, 0x12, 0x0e, 0x18, 0x7f, 0x00, 0x7e, 0x80, 0x7d} },
+{ 0x0ab9,      16,     {0x00, 0x7c, 0x80, 0x12, 0x08, 0x34, 0xe4, 0x33, 0xf5, 0x33, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x0e} },
+{ 0x0ac9,      16,     {0x18, 0xe5, 0x33, 0x60, 0x1b, 0x7f, 0x03, 0x12, 0x0e, 0x18, 0x7f, 0x00, 0x7e, 0x20, 0x7d, 0x40} },
+{ 0x0ad9,      16,     {0x7c, 0x5b, 0x12, 0x08, 0x34, 0xe4, 0x33, 0xf5, 0x33, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x0e, 0x18} },
+{ 0x0ae9,      13,     {0xe5, 0x33, 0x60, 0x05, 0xe4, 0xff, 0x12, 0x0e, 0x18, 0xe5, 0x33, 0x24, 0xff} },
+{ 0x0af6,      1,      {0x22} },
+{ 0x0af7,      8,      {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x10, 0xd3, 0x22} },
+{ 0x0aff,      1,      {0x32} },
+{ 0x0b00,      16,     {0x02, 0x0d, 0xa5, 0x00, 0x02, 0x0d, 0xec, 0x00, 0x02, 0x0d, 0x70, 0x00, 0x02, 0x0d, 0xbd, 0x00} },
+{ 0x0b10,      16,     {0x02, 0x0e, 0x02, 0x00, 0x02, 0x0a, 0xff, 0x00, 0x02, 0x0e, 0x83, 0x00, 0x02, 0x0e, 0x84, 0x00} },
+{ 0x0b20,      16,     {0x02, 0x0e, 0x85, 0x00, 0x02, 0x0e, 0x86, 0x00, 0x02, 0x0e, 0x87, 0x00, 0x02, 0x0e, 0x88, 0x00} },
+{ 0x0b30,      16,     {0x02, 0x0e, 0x89, 0x00, 0x02, 0x0e, 0x8a, 0x00, 0x02, 0x0e, 0x8b, 0x00, 0x02, 0x0e, 0x8c, 0x00} },
+{ 0x0b40,      16,     {0x02, 0x0e, 0x8d, 0x00, 0x02, 0x0e, 0x8e, 0x00, 0x02, 0x0e, 0x8f, 0x00, 0x02, 0x0e, 0x90, 0x00} },
+{ 0x0b50,      8,      {0x02, 0x0e, 0x91, 0x00, 0x02, 0x0e, 0x92, 0x00} },
+{ 0x0b58,      16,     {0xe4, 0xfe, 0x75, 0x2b, 0xff, 0x75, 0x2c, 0x11, 0x75, 0x2d, 0x12, 0xab, 0x2b, 0xaa, 0x2c, 0xa9} },
+{ 0x0b68,      16,     {0x2d, 0x90, 0x00, 0x01, 0x12, 0x07, 0x85, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0xb5} },
+{ 0x0b78,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x07, 0xd4, 0x85, 0xf0, 0x29, 0xf5, 0x2a, 0x62, 0x29} },
+{ 0x0b88,      16,     {0xe5, 0x29, 0x62, 0x2a, 0xe5, 0x2a, 0x62, 0x29, 0x29, 0xfd, 0xe5, 0x29, 0x3a, 0xa9, 0x05, 0x75} },
+{ 0x0b98,      14,     {0x2b, 0xff, 0xf5, 0x2c, 0x89, 0x2d, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x0ba6,      1,      {0x22} },
+{ 0x0ba7,      6,      {0xab, 0x07, 0xaa, 0x06, 0xac, 0x05} },
+{ 0x0bad,      16,     {0xe4, 0xfd, 0xe5, 0x11, 0x60, 0x11, 0xea, 0xff, 0xae, 0x05, 0x0d, 0xee, 0x24, 0x10, 0xf5, 0x82} },
+{ 0x0bbd,      16,     {0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xef, 0xf0, 0xeb, 0xae, 0x05, 0x0d, 0x74, 0x10, 0x2e, 0xf5, 0x82} },
+{ 0x0bcd,      16,     {0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xeb, 0xf0, 0xaf, 0x05, 0x0d, 0x74, 0x10, 0x2f, 0xf5, 0x82, 0xe4} },
+{ 0x0bdd,      16,     {0x34, 0x0f, 0xf5, 0x83, 0xec, 0xf0, 0xaf, 0x0f, 0x7a, 0x0f, 0x7b, 0x10, 0x12, 0x0d, 0x51, 0x7f} },
+{ 0x0bed,      6,      {0x0a, 0x7e, 0x00, 0x12, 0x0d, 0xd5} },
+{ 0x0bf3,      1,      {0x22} },
+{ 0x0bf4,      10,     {0x8e, 0x33, 0x8f, 0x34, 0x8d, 0x35, 0x8a, 0x36, 0x8b, 0x37} },
+{ 0x0bfe,      16,     {0xe4, 0xfd, 0xf5, 0x38, 0xe5, 0x11, 0x60, 0x12, 0xe5, 0x33, 0xff, 0xae, 0x05, 0x0d, 0xee, 0x24} },
+{ 0x0c0e,      16,     {0x13, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x34, 0xae, 0x05, 0x0d, 0x74} },
+{ 0x0c1e,      16,     {0x13, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xe5, 0x34, 0xf0, 0xaf, 0x0f, 0x7a, 0x0f} },
+{ 0x0c2e,      16,     {0x7b, 0x13, 0x12, 0x0d, 0x51, 0xaf, 0x0f, 0xad, 0x35, 0xab, 0x37, 0xaa, 0x36, 0x12, 0x0d, 0x32} },
+{ 0x0c3e,      1,      {0x22} },
+{ 0x0c3f,      2,      {0x8f, 0x29} },
+{ 0x0c41,      16,     {0xe4, 0xf5, 0x2a, 0x75, 0x2b, 0xff, 0x75, 0x2c, 0x11, 0x75, 0x2d, 0x32, 0xab, 0x2b, 0xaa, 0x2c} },
+{ 0x0c51,      16,     {0xa9, 0x2d, 0x90, 0x00, 0x01, 0x12, 0x07, 0x85, 0xb4, 0x03, 0x1d, 0xaf, 0x2a, 0x05, 0x2a, 0xef} },
+{ 0x0c61,      16,     {0xb5, 0x29, 0x01, 0x22, 0x12, 0x07, 0x6c, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x75} },
+{ 0x0c71,      14,     {0x2b, 0xff, 0xf5, 0x2c, 0x89, 0x2d, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x0c7f,      1,      {0x22} },
+{ 0x0c80,      10,     {0x8e, 0x33, 0x8f, 0x34, 0x8d, 0x35, 0x8a, 0x36, 0x8b, 0x37} },
+{ 0x0c8a,      16,     {0xe4, 0xf5, 0x38, 0xe5, 0x38, 0xc3, 0x95, 0x35, 0x50, 0x20, 0x05, 0x34, 0xe5, 0x34, 0xae, 0x33} },
+{ 0x0c9a,      16,     {0x70, 0x02, 0x05, 0x33, 0x14, 0xff, 0xe5, 0x37, 0x25, 0x38, 0xf5, 0x82, 0xe4, 0x35, 0x36, 0xf5} },
+{ 0x0caa,      10,     {0x83, 0xe0, 0xfd, 0x12, 0x0b, 0xa7, 0x05, 0x38, 0x80, 0xd9} },
+{ 0x0cb4,      1,      {0x22} },
+{ 0x0cb5,      16,     {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x25, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xe0} },
+{ 0x0cc5,      16,     {0x44, 0x01, 0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x8a} },
+{ 0x0cd5,      13,     {0x0a, 0x89, 0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x03, 0xd3, 0x22, 0xc3, 0x22} },
+{ 0x0ce2,      16,     {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x23, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xe0} },
+{ 0x0cf2,      16,     {0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x8a, 0x0a, 0x89} },
+{ 0x0d02,      11,     {0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x01, 0xd3, 0x22, 0xc3, 0x22} },
+{ 0x0d0d,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x06, 0x04, 0xe0, 0x44} },
+{ 0x0d1d,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x0d, 0xd5, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xf0} },
+{ 0x0d2d,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x22} },
+{ 0x0d32,      16,     {0x12, 0x0c, 0xb5, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0xf3} },
+{ 0x0d42,      15,     {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x22} },
+{ 0x0d51,      16,     {0x12, 0x0c, 0xe2, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0xf3} },
+{ 0x0d61,      15,     {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x22} },
+{ 0x0d70,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f} },
+{ 0x0d80,      11,     {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d8b,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0x12, 0xe0, 0x44, 0x01, 0xf0, 0x7f, 0x14, 0x7e, 0x00, 0x12} },
+{ 0x0d9b,      10,     {0x0d, 0xd5, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfe, 0xf0, 0x22} },
+{ 0x0da5,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x01} },
+{ 0x0db5,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dbd,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x03, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x08} },
+{ 0x0dcd,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dd5,      16,     {0x8e, 0x39, 0x8f, 0x3a, 0xe5, 0x3a, 0x15, 0x3a, 0xae, 0x39, 0x70, 0x02, 0x15, 0x39, 0x4e, 0x60} },
+{ 0x0de5,      7,      {0x05, 0x12, 0x0e, 0x41, 0x80, 0xee, 0x22} },
+{ 0x0dec,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0xd0} },
+{ 0x0dfc,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0e02,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0xd0} },
+{ 0x0e12,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0e18,      16,     {0xae, 0x07, 0x7f, 0x21, 0x7d, 0x01, 0x74, 0x00, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xab, 0x82} },
+{ 0x0e28,      5,      {0xfa, 0x12, 0x0d, 0x51, 0x22} },
+{ 0x0e2d,      16,     {0x50, 0x0f, 0x00, 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0xc6} },
+{ 0x0e3d,      3,      {0xa1, 0x86, 0x8e} },
+{ 0x0e40,      1,      {0x00} },
+{ 0x0e41,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0xf9} },
+{ 0x0e51,      1,      {0x22} },
+{ 0x0e52,      14,     {0x90, 0x7f, 0x00, 0xe5, 0x0e, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x22} },
+{ 0x0e60,      8,      {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0e, 0xd3, 0x22} },
+{ 0x0e68,      8,      {0xe4, 0xf5, 0x0d, 0xd2, 0xe9, 0xd2, 0xaf, 0x22} },
+{ 0x0e70,      4,      {0x53, 0xd8, 0xef, 0x32} },
+{ 0x0e74,      3,      {0xd2, 0x00, 0x22} },
+{ 0x0e77,      2,      {0xd3, 0x22} },
+{ 0x0e79,      2,      {0xd3, 0x22} },
+{ 0x0e7b,      2,      {0xd3, 0x22} },
+{ 0x0e7d,      2,      {0xd3, 0x22} },
+{ 0x0e7f,      2,      {0xd3, 0x22} },
+{ 0x0e81,      2,      {0xd3, 0x22} },
+{ 0x0e83,      1,      {0x32} },
+{ 0x0e84,      1,      {0x32} },
+{ 0x0e85,      1,      {0x32} },
+{ 0x0e86,      1,      {0x32} },
+{ 0x0e87,      1,      {0x32} },
+{ 0x0e88,      1,      {0x32} },
+{ 0x0e89,      1,      {0x32} },
+{ 0x0e8a,      1,      {0x32} },
+{ 0x0e8b,      1,      {0x32} },
+{ 0x0e8c,      1,      {0x32} },
+{ 0x0e8d,      1,      {0x32} },
+{ 0x0e8e,      1,      {0x32} },
+{ 0x0e8f,      1,      {0x32} },
+{ 0x0e90,      1,      {0x32} },
+{ 0x0e91,      1,      {0x32} },
+{ 0x0e92,      1,      {0x32} },
+{ 0x1100,      16,     {0x12, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x47, 0x05, 0x10, 0x27, 0x01, 0x00, 0x01, 0x02} },
+{ 0x1110,      16,     {0x00, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x03, 0xa0, 0x00, 0x09, 0x04, 0x00, 0x00, 0x02} },
+{ 0x1120,      16,     {0xff, 0x00, 0x00, 0x04, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x40} },
+{ 0x1130,      16,     {0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x26, 0x03, 0x41, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00} },
+{ 0x1140,      16,     {0x6f, 0x00, 0x72, 0x00, 0x20, 0x00, 0x43, 0x00, 0x68, 0x00, 0x69, 0x00, 0x70, 0x00, 0x73, 0x00} },
+{ 0x1150,      16,     {0x2c, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x2e, 0x00, 0x28, 0x03, 0x46, 0x00} },
+{ 0x1160,      16,     {0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x00} },
+{ 0x1170,      16,     {0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x57, 0x00, 0x6f, 0x00, 0x72, 0x00} },
+{ 0x1180,      16,     {0x6b, 0x00, 0x73, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x00} },
+{ 0x1190,      16,     {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00} },
+{ 0x11a0,      16,     {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x03} },
+{ 0x11b0,      16,     {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x00} },
+{ 0x11c0,      16,     {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00} },
+{ 0x11d0,      2,      {0x00, 0x00} },
+{ 0xffff,      0,      {0x00} }
+};
+
+#else
+
 static const struct whiteheat_hex_record whiteheat_loader[] = {
-{ 0x0000,      3,      {0x02, 0x09, 0x00} },
-{ 0x0033,      3,      {0x02, 0x08, 0x00} },
+{ 0x0000,      3,      {0x02, 0x09, 0x8d} },
+{ 0x0033,      3,      {0x02, 0x08, 0xfb} },
 { 0x0043,      3,      {0x02, 0x0b, 0x00} },
-{ 0x004b,      3,      {0x02, 0x05, 0x00} },
-{ 0x0100,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x54, 0x10, 0xff, 0xc4, 0x54, 0x0f, 0x44, 0x50, 0xf5, 0x0f, 0x13, 0xf5} },
-{ 0x0110,      16,     {0x33, 0xf5, 0x11, 0x90, 0x7f, 0xe9, 0xe0, 0x24, 0x5e, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x40} },
+{ 0x004b,      3,      {0x02, 0x05, 0xaa} },
+{ 0x0100,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x54, 0x10, 0xff, 0xc4, 0x54, 0x0f, 0x44, 0x50, 0xf5, 0x0f, 0x13, 0xe4} },
+{ 0x0110,      16,     {0x33, 0xf5, 0x11, 0x90, 0x7f, 0xe9, 0xe0, 0x24, 0x5e, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x03} },
 { 0x0120,      16,     {0x78, 0x90, 0x01, 0x28, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x01, 0xbc, 0x02, 0x01, 0xbc, 0x02, 0x01} },
-{ 0x0130,      16,     {0x91, 0x02, 0x01, 0x3d, 0x02, 0x01, 0x53, 0x02, 0x01, 0x6f, 0x02, 0x01, 0x9a, 0x90, 0x7f, 0x9a} },
-{ 0x0140,      16,     {0xe5, 0x11, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xe0} },
-{ 0x0150,      16,     {0x02, 0x03, 0x78, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x90, 0x7f, 0x00, 0xf0, 0x7f} },
-{ 0x0160,      16,     {0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x03, 0x78, 0x02} },
-{ 0x0170,      16,     {0x0a, 0x89, 0x50, 0x07, 0xe4, 0x90, 0x7f, 0x00, 0xf0, 0x80, 0x06, 0x90, 0x7f, 0x00, 0x74, 0x7f} },
-{ 0x0180,      16,     {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x02} },
-{ 0x0190,      16,     {0x78, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0f, 0x02, 0x03, 0x78, 0x90, 0x7f, 0x00, 0x74, 0x07, 0x00} },
-{ 0x01a0,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0xe8, 0xf0} },
-{ 0x01b0,      16,     {0x03, 0x12, 0x0d, 0x94, 0xd2, 0x06, 0x12, 0x0c, 0xcc, 0x02, 0x03, 0x78, 0x90, 0x7f, 0xea, 0x90} },
-{ 0x01c0,      16,     {0x75, 0x28, 0x00, 0xf5, 0x29, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x28, 0x90, 0x7f, 0xee, 0x90} },
-{ 0x01d0,      16,     {0x75, 0x2a, 0x00, 0xf5, 0x2b, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x2a, 0x90, 0x7f, 0xe8, 0x90} },
-{ 0x01e0,      16,     {0x64, 0xc0, 0x60, 0x03, 0x02, 0x02, 0xc9, 0xe5, 0x2b, 0x45, 0x2a, 0x70, 0x03, 0x02, 0x03, 0x03} },
-{ 0x01f0,      16,     {0xc3, 0xe5, 0x2b, 0x94, 0x40, 0xe5, 0x2a, 0x94, 0x00, 0x50, 0x08, 0x85, 0x2a, 0x2c, 0x85, 0x2a} },
-{ 0x0200,      16,     {0x2d, 0x80, 0x06, 0x75, 0x2c, 0x00, 0x75, 0x2d, 0x40, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0xe0} },
-{ 0x0210,      16,     {0x34, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31, 0x95, 0x2d, 0xe5, 0x30, 0x95, 0x2c, 0x50, 0x95} },
-{ 0x0220,      16,     {0xe5, 0x29, 0x25, 0x31, 0xf5, 0x82, 0xe5, 0x30, 0x35, 0x28, 0xf5, 0x83, 0xe0, 0xff, 0x74, 0xe0} },
-{ 0x0230,      16,     {0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x31} },
-{ 0x0240,      16,     {0x02, 0x05, 0x30, 0x80, 0xd0, 0xe4, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31, 0x95, 0x2d, 0x31} },
-{ 0x0250,      16,     {0x30, 0x95, 0x2c, 0x50, 0x18, 0x74, 0x00, 0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x34} },
-{ 0x0260,      16,     {0x74, 0xcd, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70, 0x02, 0x05, 0x30, 0x80, 0xdd, 0xaf, 0x29, 0xdd} },
-{ 0x0270,      16,     {0x28, 0xad, 0x2d, 0x7a, 0x7f, 0x79, 0x00, 0x7b, 0x00, 0x12, 0x0b, 0xf4, 0x90, 0x7f, 0xb5, 0x90} },
-{ 0x0280,      16,     {0x2d, 0xf0, 0xe5, 0x2d, 0x25, 0x29, 0xf5, 0x29, 0xe5, 0x2c, 0x35, 0x28, 0xf5, 0x28, 0xc3, 0xf5} },
-{ 0x0290,      16,     {0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0xe5, 0x2a, 0x95, 0x2c, 0xf5, 0x2a, 0x90, 0x7f, 0x92, 0xe0, 0x7f} },
-{ 0x02a0,      16,     {0xc4, 0x54, 0x0f, 0x75, 0x2e, 0x00, 0xf5, 0x2f, 0xd3, 0x94, 0x00, 0xe5, 0x2e, 0x94, 0x00, 0x2e} },
-{ 0x02b0,      16,     {0x0c, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe1, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xf4} },
-{ 0x02c0,      16,     {0xe0, 0x20, 0xe2, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xe8, 0xe0, 0x64, 0x40, 0xe0} },
-{ 0x02d0,      16,     {0x03, 0x02, 0x03, 0x78, 0xe5, 0x2b, 0x45, 0x2a, 0x70, 0x03, 0x02, 0x03, 0x78, 0xe4, 0x90, 0x78} },
-{ 0x02e0,      16,     {0xc5, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x75, 0x2e, 0x00, 0xf5, 0x2f, 0x00} },
-{ 0x02f0,      16,     {0x94, 0x00, 0xe5, 0x2e, 0x94, 0x00, 0x50, 0x09, 0x90, 0x7f, 0xc4, 0xe0, 0x30, 0xe1, 0x09, 0x30} },
-{ 0x0300,      16,     {0xf7, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe3, 0xf9, 0x90, 0x7f, 0xc5, 0xe0, 0x75, 0x2c, 0x00, 0x75} },
+{ 0x0130,      16,     {0x91, 0x02, 0x01, 0x3d, 0x02, 0x01, 0x53, 0x02, 0x01, 0x6f, 0x02, 0x01, 0x9a, 0x90, 0x7f, 0x00} },
+{ 0x0140,      16,     {0xe5, 0x11, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0} },
+{ 0x0150,      16,     {0x02, 0x03, 0x78, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x90, 0x7f, 0x00, 0xf0, 0x90} },
+{ 0x0160,      16,     {0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x03, 0x78, 0x12} },
+{ 0x0170,      16,     {0x0a, 0x89, 0x50, 0x07, 0xe4, 0x90, 0x7f, 0x00, 0xf0, 0x80, 0x06, 0x90, 0x7f, 0x00, 0x74, 0x0f} },
+{ 0x0180,      16,     {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x03} },
+{ 0x0190,      16,     {0x78, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0f, 0x02, 0x03, 0x78, 0x90, 0x7f, 0x00, 0x74, 0x07, 0xf0} },
+{ 0x01a0,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0xe8, 0x7e} },
+{ 0x01b0,      16,     {0x03, 0x12, 0x0d, 0x94, 0xd2, 0x06, 0x12, 0x0c, 0xcc, 0x02, 0x03, 0x78, 0x90, 0x7f, 0xea, 0xe0} },
+{ 0x01c0,      16,     {0x75, 0x28, 0x00, 0xf5, 0x29, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x28, 0x90, 0x7f, 0xee, 0xe0} },
+{ 0x01d0,      16,     {0x75, 0x2a, 0x00, 0xf5, 0x2b, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x2a, 0x90, 0x7f, 0xe8, 0xe0} },
+{ 0x01e0,      16,     {0x64, 0xc0, 0x60, 0x03, 0x02, 0x02, 0xc9, 0xe5, 0x2b, 0x45, 0x2a, 0x70, 0x03, 0x02, 0x03, 0x78} },
+{ 0x01f0,      16,     {0xc3, 0xe5, 0x2b, 0x94, 0x40, 0xe5, 0x2a, 0x94, 0x00, 0x50, 0x08, 0x85, 0x2a, 0x2c, 0x85, 0x2b} },
+{ 0x0200,      16,     {0x2d, 0x80, 0x06, 0x75, 0x2c, 0x00, 0x75, 0x2d, 0x40, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0x70} },
+{ 0x0210,      16,     {0x34, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31, 0x95, 0x2d, 0xe5, 0x30, 0x95, 0x2c, 0x50, 0x5c} },
+{ 0x0220,      16,     {0xe5, 0x29, 0x25, 0x31, 0xf5, 0x82, 0xe5, 0x30, 0x35, 0x28, 0xf5, 0x83, 0xe0, 0xff, 0x74, 0x00} },
+{ 0x0230,      16,     {0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70} },
+{ 0x0240,      16,     {0x02, 0x05, 0x30, 0x80, 0xd0, 0xe4, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31, 0x95, 0x2d, 0xe5} },
+{ 0x0250,      16,     {0x30, 0x95, 0x2c, 0x50, 0x18, 0x74, 0x00, 0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83} },
+{ 0x0260,      16,     {0x74, 0xcd, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70, 0x02, 0x05, 0x30, 0x80, 0xdd, 0xaf, 0x29, 0xae} },
+{ 0x0270,      16,     {0x28, 0xad, 0x2d, 0x7a, 0x7f, 0x79, 0x00, 0x7b, 0x00, 0x12, 0x0b, 0xf4, 0x90, 0x7f, 0xb5, 0xe5} },
+{ 0x0280,      16,     {0x2d, 0xf0, 0xe5, 0x2d, 0x25, 0x29, 0xf5, 0x29, 0xe5, 0x2c, 0x35, 0x28, 0xf5, 0x28, 0xc3, 0xe5} },
+{ 0x0290,      16,     {0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0xe5, 0x2a, 0x95, 0x2c, 0xf5, 0x2a, 0x90, 0x7f, 0x92, 0xe0, 0xff} },
+{ 0x02a0,      16,     {0xc4, 0x54, 0x0f, 0x75, 0x2e, 0x00, 0xf5, 0x2f, 0xd3, 0x94, 0x00, 0xe5, 0x2e, 0x94, 0x00, 0x50} },
+{ 0x02b0,      16,     {0x0c, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe1, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xb4} },
+{ 0x02c0,      16,     {0xe0, 0x20, 0xe2, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xe8, 0xe0, 0x64, 0x40, 0x60} },
+{ 0x02d0,      16,     {0x03, 0x02, 0x03, 0x78, 0xe5, 0x2b, 0x45, 0x2a, 0x70, 0x03, 0x02, 0x03, 0x78, 0xe4, 0x90, 0x7f} },
+{ 0x02e0,      16,     {0xc5, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x75, 0x2e, 0x00, 0xf5, 0x2f, 0xd3} },
+{ 0x02f0,      16,     {0x94, 0x00, 0xe5, 0x2e, 0x94, 0x00, 0x50, 0x09, 0x90, 0x7f, 0xc4, 0xe0, 0x30, 0xe1, 0x09, 0x80} },
+{ 0x0300,      16,     {0xf7, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe3, 0xf9, 0x90, 0x7f, 0xc5, 0xe0, 0x75, 0x2c, 0x00, 0xf5} },
 { 0x0310,      16,     {0x2d, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0x70, 0x34, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31} },
-{ 0x0320,      16,     {0x95, 0x2d, 0xe5, 0x30, 0x95, 0x2c, 0x50, 0x34, 0x74, 0xc0, 0x25, 0x31, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x0330,      1,      {0x03} },
-{ 0x0331,      16,     {0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x29, 0x25, 0x31, 0xf5, 0x82, 0xe5, 0x30, 0x35, 0x28, 0xf5, 0x35} },
-{ 0x0341,      16,     {0xef, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70, 0x02, 0x05, 0x30, 0x80, 0xd0, 0xaf, 0x29, 0xae, 0xaf} },
-{ 0x0351,      16,     {0xad, 0x2d, 0x7a, 0x7e, 0x79, 0xc0, 0x7b, 0xc0, 0x12, 0x0c, 0x3f, 0xe5, 0x2d, 0x25, 0x29, 0x2d} },
-{ 0x0361,      16,     {0x29, 0xe5, 0x2c, 0x35, 0x28, 0xf5, 0x28, 0xc3, 0xe5, 0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0xe5, 0xf5} },
-{ 0x0371,      9,      {0x95, 0x2c, 0xf5, 0x2a, 0x02, 0x02, 0xd4, 0xc3, 0x02} },
-{ 0x037a,      16,     {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x52, 0x14, 0x70, 0x03, 0x02, 0x04, 0xce, 0x02} },
-{ 0x038a,      16,     {0xfe, 0x70, 0x03, 0x02, 0x05, 0x42, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x04, 0x4c, 0x14, 0x70, 0x4c} },
-{ 0x039a,      16,     {0x02, 0x04, 0x46, 0x14, 0x70, 0x03, 0x02, 0x04, 0x3a, 0x14, 0x70, 0x03, 0x02, 0x04, 0x40, 0x02} },
-{ 0x03aa,      16,     {0x05, 0x60, 0x03, 0x02, 0x05, 0x96, 0x12, 0x0e, 0x44, 0x40, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x05} },
-{ 0x03ba,      16,     {0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60, 0x40, 0x24, 0x02, 0x70, 0x69, 0x74, 0x11, 0x69} },
-{ 0x03ca,      16,     {0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0x90} },
-{ 0x03da,      16,     {0xff, 0x12, 0x0b, 0x58, 0x8b, 0x25, 0x8a, 0x26, 0x89, 0x27, 0xea, 0x49, 0x60, 0x11, 0xae, 0x60} },
-{ 0x03ea,      16,     {0xee, 0x90, 0x7f, 0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x02} },
-{ 0x03fa,      16,     {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0xe0} },
-{ 0x040a,      16,     {0xba, 0x8b, 0x25, 0x8a, 0x26, 0x89, 0x27, 0xea, 0x49, 0x60, 0x11, 0xae, 0x02, 0xee, 0x90, 0x02} },
-{ 0x041a,      16,     {0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0x90} },
-{ 0x042a,      16,     {0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xf0} },
-{ 0x043a,      16,     {0x12, 0x0e, 0x1f, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x2d, 0x02, 0x05, 0xa2, 0x12, 0x0a, 0xf7, 0x12} },
-{ 0x044a,      16,     {0x05, 0xa2, 0x12, 0x0e, 0x11, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x46, 0x40, 0x03, 0x02, 0x05, 0x03} },
-{ 0x045a,      16,     {0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02, 0x70, 0x5b, 0x02} },
-{ 0x046a,      16,     {0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x02, 0xe4, 0x33, 0x4f, 0x90, 0x7f, 0x00, 0x90} },
-{ 0x047a,      16,     {0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0xe4, 0x90, 0x7f, 0xe4} },
-{ 0x048a,      16,     {0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xec, 0x90} },
-{ 0x049a,      16,     {0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0x25} },
-{ 0x04aa,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0x90, 0x7f, 0x00, 0xf0, 0xe4, 0x00} },
-{ 0x04ba,      16,     {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0xb4} },
-{ 0x04ca,      16,     {0xf0, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x48, 0x40, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xe8, 0x90} },
-{ 0x04da,      16,     {0x24, 0xfe, 0x60, 0x1d, 0x24, 0x02, 0x60, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0, 0x7f} },
-{ 0x04ea,      16,     {0x01, 0x05, 0xc2, 0x00, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x01} },
-{ 0x04fa,      16,     {0xa2, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0x38, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0x54} },
-{ 0x050a,      16,     {0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x051a,      16,     {0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x7f, 0xec, 0xe0, 0x54, 0x80, 0xff, 0x13, 0x13, 0x13, 0x54, 0x13} },
-{ 0x052a,      16,     {0xff, 0xe0, 0x54, 0x07, 0x2f, 0x90, 0x7f, 0xd7, 0xf0, 0xe0, 0x44, 0x20, 0xf0, 0x80, 0x69, 0xf0} },
-{ 0x053a,      16,     {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x60, 0x12, 0x0e, 0x4a, 0x50, 0x5b, 0x90, 0x7f, 0x5b} },
-{ 0x054a,      16,     {0xe0, 0x24, 0xfe, 0x60, 0x18, 0x24, 0x02, 0x70, 0x4f, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0xe0} },
-{ 0x055a,      16,     {0xd2, 0x00, 0x80, 0x44, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x3b, 0x90, 0x7f, 0x3b} },
-{ 0x056a,      16,     {0xe0, 0x70, 0x20, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0x54} },
-{ 0x057a,      16,     {0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0xf5} },
-{ 0x058a,      16,     {0xf0, 0x80, 0x15, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x0c, 0x12, 0x01, 0x00, 0x12} },
-{ 0x059a,      16,     {0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x44} },
-{ 0x05aa,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} },
-{ 0x05ba,      16,     {0xd0, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x7f, 0x07} },
-{ 0x05ca,      16,     {0xe0, 0x30, 0xe2, 0x06, 0x75, 0x0d, 0x06, 0x02, 0x06, 0x76, 0x90, 0x7f, 0xa5, 0xe0, 0x20, 0xa5} },
-{ 0x05da,      16,     {0x0c, 0xe5, 0x0d, 0x64, 0x02, 0x60, 0x06, 0x75, 0x0d, 0x07, 0x02, 0x06, 0x76, 0xaf, 0x0d, 0x76} },
-{ 0x05ea,      16,     {0x24, 0xfe, 0x60, 0x48, 0x14, 0x60, 0x2c, 0x24, 0xfe, 0x60, 0x77, 0x24, 0x04, 0x60, 0x03, 0x04} },
-{ 0x05fa,      16,     {0x06, 0x76, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xaf, 0x0c, 0x05, 0x0c, 0x8f, 0x82, 0x75, 0x8f} },
-{ 0x060a,      16,     {0x00, 0x12, 0x08, 0x22, 0x90, 0x7f, 0xa6, 0xf0, 0xe5, 0x0c, 0x65, 0x08, 0x70, 0x5e, 0x75, 0x70} },
-{ 0x061a,      16,     {0x05, 0x80, 0x59, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x0b} },
-{ 0x062a,      16,     {0x82, 0x75, 0x83, 0x00, 0x12, 0x08, 0x4f, 0x75, 0x0d, 0x02, 0x80, 0x40, 0xe5, 0x08, 0x24, 0xe5} },
-{ 0x063a,      16,     {0xb5, 0x0c, 0x07, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0xe5, 0x08, 0x14, 0xb5, 0x0c, 0x14} },
-{ 0x064a,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0xa6} },
-{ 0x065a,      16,     {0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x8e, 0x82, 0x75, 0x83, 0x00, 0x12, 0x08, 0x4f, 0x05, 0x08} },
-{ 0x066a,      16,     {0x80, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x53, 0x91, 0xdf, 0x53} },
+{ 0x0320,      16,     {0x95, 0x2d, 0xe5, 0x30, 0x95, 0x2c, 0x50, 0x34, 0x74, 0xc0, 0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x0330,      1,      {0x7e} },
+{ 0x0331,      16,     {0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x29, 0x25, 0x31, 0xf5, 0x82, 0xe5, 0x30, 0x35, 0x28, 0xf5, 0x83} },
+{ 0x0341,      16,     {0xef, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70, 0x02, 0x05, 0x30, 0x80, 0xd0, 0xaf, 0x29, 0xae, 0x28} },
+{ 0x0351,      16,     {0xad, 0x2d, 0x7a, 0x7e, 0x79, 0xc0, 0x7b, 0xc0, 0x12, 0x0c, 0x3f, 0xe5, 0x2d, 0x25, 0x29, 0xf5} },
+{ 0x0361,      16,     {0x29, 0xe5, 0x2c, 0x35, 0x28, 0xf5, 0x28, 0xc3, 0xe5, 0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0xe5, 0x2a} },
+{ 0x0371,      9,      {0x95, 0x2c, 0xf5, 0x2a, 0x02, 0x02, 0xd4, 0xc3, 0x22} },
+{ 0x037a,      16,     {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x52, 0x14, 0x70, 0x03, 0x02, 0x04, 0xce, 0x24} },
+{ 0x038a,      16,     {0xfe, 0x70, 0x03, 0x02, 0x05, 0x42, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x04, 0x4c, 0x14, 0x70, 0x03} },
+{ 0x039a,      16,     {0x02, 0x04, 0x46, 0x14, 0x70, 0x03, 0x02, 0x04, 0x3a, 0x14, 0x70, 0x03, 0x02, 0x04, 0x40, 0x24} },
+{ 0x03aa,      16,     {0x05, 0x60, 0x03, 0x02, 0x05, 0x96, 0x12, 0x0e, 0x44, 0x40, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f} },
+{ 0x03ba,      16,     {0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60, 0x40, 0x24, 0x02, 0x70, 0x69, 0x74, 0x11, 0x90} },
+{ 0x03ca,      16,     {0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0} },
+{ 0x03da,      16,     {0xff, 0x12, 0x0b, 0x58, 0x8b, 0x25, 0x8a, 0x26, 0x89, 0x27, 0xea, 0x49, 0x60, 0x11, 0xae, 0x02} },
+{ 0x03ea,      16,     {0xee, 0x90, 0x7f, 0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90} },
+{ 0x03fa,      16,     {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x08} },
+{ 0x040a,      16,     {0xba, 0x8b, 0x25, 0x8a, 0x26, 0x89, 0x27, 0xea, 0x49, 0x60, 0x11, 0xae, 0x02, 0xee, 0x90, 0x7f} },
+{ 0x041a,      16,     {0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0} },
+{ 0x042a,      16,     {0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2} },
+{ 0x043a,      16,     {0x12, 0x0e, 0x1f, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x2d, 0x02, 0x05, 0xa2, 0x12, 0x0a, 0xf7, 0x02} },
+{ 0x044a,      16,     {0x05, 0xa2, 0x12, 0x0e, 0x11, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x46, 0x40, 0x03, 0x02, 0x05, 0xa2} },
+{ 0x045a,      16,     {0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02, 0x70, 0x5b, 0xa2} },
+{ 0x046a,      16,     {0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x02, 0xe4, 0x33, 0x4f, 0x90, 0x7f, 0x00, 0xf0} },
+{ 0x047a,      16,     {0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0xe4, 0x90, 0x7f, 0x00} },
+{ 0x048a,      16,     {0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xec, 0xe0} },
+{ 0x049a,      16,     {0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4} },
+{ 0x04aa,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0x90, 0x7f, 0x00, 0xf0, 0xe4, 0xa3} },
+{ 0x04ba,      16,     {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01} },
+{ 0x04ca,      16,     {0xf0, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x48, 0x40, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xe8, 0xe0} },
+{ 0x04da,      16,     {0x24, 0xfe, 0x60, 0x1d, 0x24, 0x02, 0x60, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0, 0xb4} },
+{ 0x04ea,      16,     {0x01, 0x05, 0xc2, 0x00, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05} },
+{ 0x04fa,      16,     {0xa2, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0x38, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4} },
+{ 0x050a,      16,     {0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f} },
+{ 0x051a,      16,     {0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x7f, 0xec, 0xe0, 0x54, 0x80, 0xff, 0x13, 0x13, 0x13, 0x54, 0x1f} },
+{ 0x052a,      16,     {0xff, 0xe0, 0x54, 0x07, 0x2f, 0x90, 0x7f, 0xd7, 0xf0, 0xe0, 0x44, 0x20, 0xf0, 0x80, 0x69, 0x90} },
+{ 0x053a,      16,     {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x60, 0x12, 0x0e, 0x4a, 0x50, 0x5b, 0x90, 0x7f, 0xe8} },
+{ 0x054a,      16,     {0xe0, 0x24, 0xfe, 0x60, 0x18, 0x24, 0x02, 0x70, 0x4f, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x04} },
+{ 0x055a,      16,     {0xd2, 0x00, 0x80, 0x44, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x3b, 0x90, 0x7f, 0xea} },
+{ 0x056a,      16,     {0xe0, 0x70, 0x20, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0} },
+{ 0x057a,      16,     {0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01} },
+{ 0x058a,      16,     {0xf0, 0x80, 0x15, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x0c, 0x12, 0x01, 0x00, 0x50} },
+{ 0x059a,      16,     {0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x22} },
+{ 0x05aa,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
+{ 0x05ba,      16,     {0xd0, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x7f, 0xa5} },
+{ 0x05ca,      16,     {0xe0, 0x30, 0xe2, 0x06, 0x75, 0x0d, 0x06, 0x02, 0x06, 0x76, 0x90, 0x7f, 0xa5, 0xe0, 0x20, 0xe1} },
+{ 0x05da,      16,     {0x0c, 0xe5, 0x0d, 0x64, 0x02, 0x60, 0x06, 0x75, 0x0d, 0x07, 0x02, 0x06, 0x76, 0xaf, 0x0d, 0xef} },
+{ 0x05ea,      16,     {0x24, 0xfe, 0x60, 0x48, 0x14, 0x60, 0x2c, 0x24, 0xfe, 0x60, 0x77, 0x24, 0x04, 0x60, 0x03, 0x02} },
+{ 0x05fa,      16,     {0x06, 0x76, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xaf, 0x0c, 0x05, 0x0c, 0x8f, 0x82, 0x75, 0x83} },
+{ 0x060a,      16,     {0x00, 0x12, 0x08, 0x22, 0x90, 0x7f, 0xa6, 0xf0, 0xe5, 0x0c, 0x65, 0x08, 0x70, 0x5e, 0x75, 0x0d} },
+{ 0x061a,      16,     {0x05, 0x80, 0x59, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x8e} },
+{ 0x062a,      16,     {0x82, 0x75, 0x83, 0x00, 0x12, 0x08, 0x4f, 0x75, 0x0d, 0x02, 0x80, 0x40, 0xe5, 0x08, 0x24, 0xfe} },
+{ 0x063a,      16,     {0xb5, 0x0c, 0x07, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0xe5, 0x08, 0x14, 0xb5, 0x0c, 0x0a} },
+{ 0x064a,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0x09} },
+{ 0x065a,      16,     {0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x8e, 0x82, 0x75, 0x83, 0x00, 0x12, 0x08, 0x4f, 0x05, 0x0c} },
+{ 0x066a,      16,     {0x80, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x53, 0x91, 0xdf, 0xd0} },
 { 0x067a,      16,     {0x07, 0xd0, 0x06, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x86, 0xd0} },
-{ 0x068a,      10,     {0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0694,      16,     {0x8c, 0x33, 0x8d, 0x34, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0xe4, 0xf5, 0x35, 0xf5, 0xf5} },
-{ 0x06a4,      16,     {0xc3, 0xe5, 0x36, 0x95, 0x34, 0xe5, 0x35, 0x95, 0x33, 0x50, 0x69, 0xef, 0x25, 0x36, 0xf5, 0x25} },
-{ 0x06b4,      16,     {0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0xff, 0xf0, 0xf4, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x22} },
-{ 0x06c4,      16,     {0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe4, 0xf0, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x22} },
-{ 0x06d4,      16,     {0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0xaa, 0xf0, 0x64, 0xaa, 0x60, 0x02, 0xc3, 0x60} },
-{ 0x06e4,      16,     {0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0x55, 0xf0, 0x64, 0x55, 0xf0} },
-{ 0x06f4,      16,     {0x02, 0xc3, 0x22, 0xad, 0x36, 0xe5, 0x36, 0x2f, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x3e} },
-{ 0x0704,      16,     {0xf0, 0xfc, 0xac, 0x05, 0xed, 0x6c, 0x60, 0x02, 0xc3, 0x22, 0x05, 0x36, 0xe5, 0x36, 0x70, 0xe5} },
-{ 0x0714,      16,     {0x05, 0x35, 0x80, 0x8c, 0xe4, 0xf5, 0x35, 0xf5, 0x36, 0xc3, 0xe5, 0x36, 0x95, 0x34, 0xe5, 0x95} },
-{ 0x0724,      16,     {0x95, 0x33, 0x50, 0x27, 0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe0, 0xf5} },
-{ 0x0734,      16,     {0x36, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x3e} },
-{ 0x0744,      13,     {0xf0, 0x05, 0x36, 0xe5, 0x36, 0x70, 0x02, 0x05, 0x35, 0x80, 0xce, 0xd3, 0x80} },
-{ 0x0751,      16,     {0xc2, 0x04, 0xd2, 0x05, 0xc2, 0x03, 0xc2, 0x00, 0xc2, 0x02, 0xc2, 0x01, 0x12, 0x0e, 0x3d, 0x12} },
-{ 0x0761,      16,     {0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xa9, 0xf0, 0x90, 0xa9} },
-{ 0x0771,      16,     {0xaa, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0x90, 0x7f, 0x93, 0x90} },
-{ 0x0781,      16,     {0x30, 0xf0, 0x12, 0x0a, 0x19, 0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0x90} },
-{ 0x0791,      16,     {0x44, 0x0d, 0xf0, 0xd2, 0xaf, 0x12, 0x0e, 0x35, 0x20, 0x01, 0x42, 0x75, 0x24, 0x00, 0x75, 0x24} },
-{ 0x07a1,      16,     {0x00, 0x75, 0x22, 0x00, 0x75, 0x21, 0x00, 0x7f, 0x48, 0x7e, 0x92, 0x7d, 0x00, 0x7c, 0x00, 0x00} },
-{ 0x07b1,      16,     {0x24, 0xaa, 0x23, 0xa9, 0x22, 0xa8, 0x21, 0xc3, 0x12, 0x08, 0xa9, 0x50, 0xdb, 0x20, 0x01, 0xdb} },
-{ 0x07c1,      16,     {0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xe5, 0x24, 0x24, 0x01, 0xf5, 0x24, 0xea, 0x35, 0x23, 0xea} },
-{ 0x07d1,      16,     {0x23, 0xe9, 0x35, 0x22, 0xf5, 0x22, 0xe8, 0x35, 0x21, 0xf5, 0x21, 0x80, 0xca, 0x30, 0x01, 0xca} },
-{ 0x07e1,      16,     {0x12, 0x03, 0x7a, 0xc2, 0x01, 0x30, 0x04, 0x1a, 0x12, 0x0e, 0x40, 0x50, 0x13, 0x12, 0x09, 0x13} },
-{ 0x07f1,      16,     {0x30, 0x00, 0x07, 0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0xf3, 0x12, 0x0d, 0x4a, 0x12, 0x0e, 0x4a} },
-{ 0x0801,      8,      {0xc2, 0x03, 0x12, 0x08, 0xff, 0x80, 0xd6, 0xff} },
-{ 0x0809,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x22} },
-{ 0x0819,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x83} },
-{ 0x0822,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x83} },
-{ 0x0832,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x82} },
-{ 0x0842,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x83} },
-{ 0x084f,      16,     {0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf5} },
-{ 0x085f,      16,     {0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb, 0xfe, 0x05, 0xe9, 0x25, 0x82, 0xe9} },
-{ 0x086f,      2,      {0xf2, 0x6f} },
-{ 0x0871,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0x83} },
-{ 0x0881,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xe6} },
+{ 0x068a,      10,     {0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0694,      16,     {0x8c, 0x33, 0x8d, 0x34, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0xe4, 0xf5, 0x35, 0xf5, 0x36} },
+{ 0x06a4,      16,     {0xc3, 0xe5, 0x36, 0x95, 0x34, 0xe5, 0x35, 0x95, 0x33, 0x50, 0x69, 0xef, 0x25, 0x36, 0xf5, 0x82} },
+{ 0x06b4,      16,     {0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0xff, 0xf0, 0xf4, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x36} },
+{ 0x06c4,      16,     {0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe4, 0xf0, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x36} },
+{ 0x06d4,      16,     {0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0xaa, 0xf0, 0x64, 0xaa, 0x60, 0x02, 0xc3, 0x22} },
+{ 0x06e4,      16,     {0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0x55, 0xf0, 0x64, 0x55, 0x60} },
+{ 0x06f4,      16,     {0x02, 0xc3, 0x22, 0xad, 0x36, 0xe5, 0x36, 0x2f, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xed} },
+{ 0x0704,      16,     {0xf0, 0xfc, 0xac, 0x05, 0xed, 0x6c, 0x60, 0x02, 0xc3, 0x22, 0x05, 0x36, 0xe5, 0x36, 0x70, 0x02} },
+{ 0x0714,      16,     {0x05, 0x35, 0x80, 0x8c, 0xe4, 0xf5, 0x35, 0xf5, 0x36, 0xc3, 0xe5, 0x36, 0x95, 0x34, 0xe5, 0x35} },
+{ 0x0724,      16,     {0x95, 0x33, 0x50, 0x27, 0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe0, 0x65} },
+{ 0x0734,      16,     {0x36, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe4} },
+{ 0x0744,      13,     {0xf0, 0x05, 0x36, 0xe5, 0x36, 0x70, 0x02, 0x05, 0x35, 0x80, 0xce, 0xd3, 0x22} },
+{ 0x0751,      16,     {0xc2, 0x04, 0xd2, 0x05, 0xc2, 0x03, 0xc2, 0x00, 0xc2, 0x02, 0xc2, 0x01, 0x12, 0x0e, 0x3d, 0xd2} },
+{ 0x0761,      16,     {0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xa9, 0xf0, 0x90, 0x7f} },
+{ 0x0771,      16,     {0xaa, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0x90, 0x7f, 0x93, 0x74} },
+{ 0x0781,      16,     {0x30, 0xf0, 0x12, 0x0a, 0x19, 0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0xe0} },
+{ 0x0791,      16,     {0x44, 0x0d, 0xf0, 0xd2, 0xaf, 0x12, 0x0e, 0x35, 0x20, 0x01, 0x42, 0x75, 0x24, 0x00, 0x75, 0x23} },
+{ 0x07a1,      16,     {0x00, 0x75, 0x22, 0x00, 0x75, 0x21, 0x00, 0x7f, 0x48, 0x7e, 0x92, 0x7d, 0x00, 0x7c, 0x00, 0xab} },
+{ 0x07b1,      16,     {0x24, 0xaa, 0x23, 0xa9, 0x22, 0xa8, 0x21, 0xc3, 0x12, 0x08, 0xa9, 0x50, 0xdb, 0x20, 0x01, 0xd8} },
+{ 0x07c1,      16,     {0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xe5, 0x24, 0x24, 0x01, 0xf5, 0x24, 0xea, 0x35, 0x23, 0xf5} },
+{ 0x07d1,      16,     {0x23, 0xe9, 0x35, 0x22, 0xf5, 0x22, 0xe8, 0x35, 0x21, 0xf5, 0x21, 0x80, 0xca, 0x30, 0x01, 0x05} },
+{ 0x07e1,      16,     {0x12, 0x03, 0x7a, 0xc2, 0x01, 0x30, 0x04, 0x1a, 0x12, 0x0e, 0x40, 0x50, 0x13, 0x12, 0x09, 0x00} },
+{ 0x07f1,      16,     {0x30, 0x00, 0x07, 0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0xf3, 0x12, 0x0d, 0x4a, 0x12, 0x0e, 0x42} },
+{ 0x0801,      8,      {0xc2, 0x03, 0x12, 0x08, 0xff, 0x80, 0xd6, 0x22} },
+{ 0x0809,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02} },
+{ 0x0819,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x0822,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x50} },
+{ 0x0832,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x22} },
+{ 0x0842,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x084f,      16,     {0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf0} },
+{ 0x085f,      16,     {0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb, 0xfe, 0x05, 0xe9, 0x25, 0x82, 0xc8} },
+{ 0x086f,      2,      {0xf2, 0x22} },
+{ 0x0871,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0} },
+{ 0x0881,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe} },
 { 0x0891,      16,     {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} },
-{ 0x08a1,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0xa3} },
-{ 0x08a9,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xe8} },
-{ 0x08b9,      1,      {0x08} },
-{ 0x08ba,      2,      {0x8f, 0xba} },
-{ 0x08bc,      16,     {0xe4, 0xf5, 0x29, 0x75, 0x2a, 0xff, 0x75, 0x2b, 0x11, 0x75, 0x2c, 0x32, 0xab, 0x2a, 0xaa, 0xab} },
-{ 0x08cc,      16,     {0xa9, 0x2c, 0x90, 0x00, 0x01, 0x12, 0x08, 0x22, 0xb4, 0x03, 0x1d, 0xaf, 0x29, 0x05, 0x29, 0x29} },
-{ 0x08dc,      16,     {0xb5, 0x28, 0x01, 0x22, 0x12, 0x08, 0x09, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x3a} },
-{ 0x08ec,      14,     {0x2a, 0xff, 0xf5, 0x2b, 0x89, 0x2c, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} },
-{ 0x08fa,      1,      {0x08} },
-{ 0x08fb,      4,      {0x53, 0xd8, 0xef, 0x53} },
-{ 0x08ff,      1,      {0x08} },
-{ 0x0900,      9,      {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x80} },
-{ 0x097d,      16,     {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} },
-{ 0x098d,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x39, 0x02, 0x09, 0x39} },
-{ 0x0999,      16,     {0x02, 0x07, 0x51, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf6} },
-{ 0x09a9,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x0c} },
-{ 0x09b9,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0x01} },
-{ 0x09c9,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x0d, 0xec, 0xe4, 0x0d} },
-{ 0x09d9,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x1f} },
-{ 0x09e9,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xb8} },
+{ 0x08a1,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22} },
+{ 0x08a9,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0} },
+{ 0x08b9,      1,      {0x22} },
+{ 0x08ba,      2,      {0x8f, 0x28} },
+{ 0x08bc,      16,     {0xe4, 0xf5, 0x29, 0x75, 0x2a, 0xff, 0x75, 0x2b, 0x11, 0x75, 0x2c, 0x32, 0xab, 0x2a, 0xaa, 0x2b} },
+{ 0x08cc,      16,     {0xa9, 0x2c, 0x90, 0x00, 0x01, 0x12, 0x08, 0x22, 0xb4, 0x03, 0x1d, 0xaf, 0x29, 0x05, 0x29, 0xef} },
+{ 0x08dc,      16,     {0xb5, 0x28, 0x01, 0x22, 0x12, 0x08, 0x09, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x75} },
+{ 0x08ec,      14,     {0x2a, 0xff, 0xf5, 0x2b, 0x89, 0x2c, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x08fa,      1,      {0x22} },
+{ 0x08fb,      4,      {0x53, 0xd8, 0xef, 0x32} },
+{ 0x08ff,      1,      {0x22} },
+{ 0x0900,      9,      {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x74} },
+{ 0x097d,      16,     {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22} },
+{ 0x098d,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x39, 0x02, 0x09, 0xd4} },
+{ 0x0999,      16,     {0x02, 0x07, 0x51, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2} },
+{ 0x09a9,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x33} },
+{ 0x09b9,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf} },
+{ 0x09c9,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x0d, 0xec, 0xe4, 0x7e} },
+{ 0x09d9,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93} },
+{ 0x09e9,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xa3} },
 { 0x09f9,      16,     {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} },
-{ 0x0a09,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xde} },
-{ 0x0a19,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0x74, 0x7f} },
-{ 0x0a29,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x0d, 0x94, 0x90, 0x0d} },
-{ 0x0a39,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x7f, 0x05, 0x7e, 0x7f} },
-{ 0x0a49,      16,     {0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02, 0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x7f} },
-{ 0x0a59,      16,     {0x7e, 0x00, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x7f} },
-{ 0x0a69,      16,     {0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x7e} },
-{ 0x0a79,      16,     {0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x12} },
-{ 0x0a89,      16,     {0x75, 0x32, 0x01, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x01, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x7f} },
-{ 0x0a99,      16,     {0x7d, 0x00, 0x7c, 0x01, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x05} },
-{ 0x0aa9,      16,     {0x0d, 0xd7, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x02, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x80, 0x00} },
-{ 0x0ab9,      16,     {0x00, 0x7c, 0x80, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x7f} },
-{ 0x0ac9,      16,     {0xd7, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x03, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x20, 0x7d, 0x7e} },
-{ 0x0ad9,      16,     {0x7c, 0x5b, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x0d, 0x0f} },
-{ 0x0ae9,      14,     {0xe5, 0x32, 0x60, 0x05, 0xe4, 0xff, 0x12, 0x0d, 0xd7, 0xe5, 0x32, 0x24, 0xff, 0x32} },
-{ 0x0af7,      8,      {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x10, 0xd3, 0xf5} },
-{ 0x0aff,      1,      {0x0a} },
-{ 0x0b00,      16,     {0x02, 0x0d, 0x64, 0x00, 0x02, 0x0d, 0xab, 0x00, 0x02, 0x0d, 0x2f, 0x00, 0x02, 0x0d, 0x7c, 0x02} },
-{ 0x0b10,      16,     {0x02, 0x0d, 0xc1, 0x00, 0x02, 0x0a, 0xff, 0x00, 0x02, 0x0e, 0x4c, 0x00, 0x02, 0x0e, 0x4d, 0x02} },
-{ 0x0b20,      16,     {0x02, 0x0e, 0x4e, 0x00, 0x02, 0x0e, 0x4f, 0x00, 0x02, 0x0e, 0x50, 0x00, 0x02, 0x0e, 0x51, 0x02} },
-{ 0x0b30,      16,     {0x02, 0x0e, 0x52, 0x00, 0x02, 0x0e, 0x53, 0x00, 0x02, 0x0e, 0x54, 0x00, 0x02, 0x0e, 0x55, 0x02} },
-{ 0x0b40,      16,     {0x02, 0x0e, 0x56, 0x00, 0x02, 0x0e, 0x57, 0x00, 0x02, 0x0e, 0x58, 0x00, 0x02, 0x0e, 0x59, 0x02} },
-{ 0x0b50,      8,      {0x02, 0x0e, 0x5a, 0x00, 0x02, 0x0e, 0x5b, 0x02} },
-{ 0x0b58,      16,     {0xe4, 0xfe, 0x75, 0x2a, 0xff, 0x75, 0x2b, 0x11, 0x75, 0x2c, 0x12, 0xab, 0x2a, 0xaa, 0x2b, 0x2a} },
-{ 0x0b68,      16,     {0x2c, 0x90, 0x00, 0x01, 0x12, 0x08, 0x22, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0x06} },
-{ 0x0b78,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x08, 0x71, 0x85, 0xf0, 0x28, 0xf5, 0x29, 0x62, 0xf5} },
-{ 0x0b88,      16,     {0xe5, 0x28, 0x62, 0x29, 0xe5, 0x29, 0x62, 0x28, 0x29, 0xfd, 0xe5, 0x28, 0x3a, 0xa9, 0x05, 0x3a} },
-{ 0x0b98,      14,     {0x2a, 0xff, 0xf5, 0x2b, 0x89, 0x2c, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} },
-{ 0x0ba6,      1,      {0x0b} },
-{ 0x0ba7,      16,     {0xab, 0x07, 0xaa, 0x06, 0xac, 0x05, 0xe4, 0xfd, 0xe5, 0x11, 0x60, 0x11, 0xea, 0xff, 0xae, 0xea} },
-{ 0x0bb7,      16,     {0x0d, 0xee, 0x24, 0x10, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xef, 0xf0, 0xeb, 0xae, 0xf0} },
-{ 0x0bc7,      16,     {0x0d, 0x74, 0x10, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xeb, 0xf0, 0xaf, 0x05, 0xf0} },
-{ 0x0bd7,      16,     {0x74, 0x10, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xec, 0xf0, 0xaf, 0x0f, 0x7a, 0xaf} },
-{ 0x0be7,      13,     {0x7b, 0x10, 0x12, 0x0d, 0x10, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x12} },
-{ 0x0bf4,      16,     {0x8e, 0x32, 0x8f, 0x33, 0x8d, 0x34, 0x8a, 0x35, 0x8b, 0x36, 0xe4, 0xfd, 0xf5, 0x37, 0xe5, 0xf5} },
-{ 0x0c04,      16,     {0x60, 0x12, 0xe5, 0x32, 0xff, 0xae, 0x05, 0x0d, 0xee, 0x24, 0x13, 0xf5, 0x82, 0xe4, 0x34, 0x82} },
-{ 0x0c14,      16,     {0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x33, 0xae, 0x05, 0x0d, 0x74, 0x13, 0x2e, 0xf5, 0x82, 0xe4, 0xf5} },
-{ 0x0c24,      16,     {0x0f, 0xf5, 0x83, 0xe5, 0x33, 0xf0, 0xaf, 0x0f, 0x7a, 0x0f, 0x7b, 0x13, 0x12, 0x0d, 0x10, 0x12} },
-{ 0x0c34,      11,     {0x0f, 0xad, 0x34, 0xab, 0x36, 0xaa, 0x35, 0x12, 0x0c, 0xf1, 0x12} },
-{ 0x0c3f,      16,     {0x8e, 0x32, 0x8f, 0x33, 0x8d, 0x34, 0x8a, 0x35, 0x8b, 0x36, 0xe4, 0xf5, 0x37, 0xe5, 0x37, 0x37} },
-{ 0x0c4f,      16,     {0x95, 0x34, 0x50, 0x20, 0x05, 0x33, 0xe5, 0x33, 0xae, 0x32, 0x70, 0x02, 0x05, 0x32, 0x14, 0x05} },
-{ 0x0c5f,      16,     {0xe5, 0x36, 0x25, 0x37, 0xf5, 0x82, 0xe4, 0x35, 0x35, 0xf5, 0x83, 0xe0, 0xfd, 0x12, 0x0b, 0xfd} },
-{ 0x0c6f,      5,      {0x05, 0x37, 0x80, 0xd9, 0x37} },
-{ 0x0c74,      16,     {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x25, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xf0} },
-{ 0x0c84,      16,     {0x44, 0x01, 0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x75} },
-{ 0x0c94,      13,     {0x0a, 0x89, 0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x03, 0xd3, 0x22, 0xc3, 0xd3} },
-{ 0x0ca1,      16,     {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x23, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xf0} },
-{ 0x0cb1,      16,     {0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x8a, 0x0a, 0x01} },
-{ 0x0cc1,      11,     {0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x01, 0xd3, 0x22, 0xc3, 0xd3} },
-{ 0x0ccc,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x06, 0x04, 0xe0, 0x06} },
-{ 0x0cdc,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xe0} },
-{ 0x0cec,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x44} },
-{ 0x0cf1,      16,     {0x12, 0x0c, 0x74, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0x24} },
-{ 0x0d01,      15,     {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x0d} },
-{ 0x0d10,      16,     {0x12, 0x0c, 0xa1, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0x24} },
-{ 0x0d20,      15,     {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x0d} },
-{ 0x0d2f,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x91} },
-{ 0x0d3f,      11,     {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0d4a,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0x12, 0xe0, 0x44, 0x01, 0xf0, 0x7f, 0x14, 0x7e, 0x00, 0x14} },
-{ 0x0d5a,      10,     {0x0d, 0x94, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfe, 0xf0, 0x54} },
-{ 0x0d64,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x7f} },
-{ 0x0d74,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0d7c,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x03, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x7f} },
-{ 0x0d8c,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0d94,      16,     {0x8e, 0x38, 0x8f, 0x39, 0xe5, 0x39, 0x15, 0x39, 0xae, 0x38, 0x70, 0x02, 0x15, 0x38, 0x4e, 0x15} },
-{ 0x0da4,      7,      {0x05, 0x12, 0x0e, 0x00, 0x80, 0xee, 0x00} },
-{ 0x0dab,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0x74} },
-{ 0x0dbb,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0dc1,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0x74} },
-{ 0x0dd1,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} },
-{ 0x0dd7,      16,     {0xae, 0x07, 0x7f, 0x21, 0x7d, 0x01, 0x74, 0x00, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xab, 0x34} },
-{ 0x0de7,      5,      {0xfa, 0x12, 0x0d, 0x10, 0x12} },
-{ 0x0dec,      16,     {0x50, 0x0f, 0x00, 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0x98} },
-{ 0x0dfc,      3,      {0xa1, 0x86, 0x00} },
-{ 0x0dff,      1,      {0x0d} },
-{ 0x0e00,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0x45} },
-{ 0x0e10,      1,      {0x0e} },
-{ 0x0e11,      14,     {0x90, 0x7f, 0x00, 0xe5, 0x10, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x01} },
-{ 0x0e1f,      14,     {0x90, 0x7f, 0x00, 0xe5, 0x0e, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x01} },
-{ 0x0e2d,      8,      {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0e, 0xd3, 0xf5} },
-{ 0x0e35,      8,      {0xe4, 0xf5, 0x0d, 0xd2, 0xe9, 0xd2, 0xaf, 0xe9} },
-{ 0x0e3d,      3,      {0xd2, 0x00, 0x00} },
-{ 0x0e40,      2,      {0xd3, 0x40} },
-{ 0x0e42,      2,      {0xd3, 0x42} },
-{ 0x0e44,      2,      {0xd3, 0x44} },
-{ 0x0e46,      2,      {0xd3, 0x46} },
-{ 0x0e48,      2,      {0xd3, 0x48} },
-{ 0x0e4a,      2,      {0xd3, 0x4a} },
-{ 0x0e4c,      1,      {0x0e} },
-{ 0x0e4d,      1,      {0x0e} },
-{ 0x0e4e,      1,      {0x0e} },
-{ 0x0e4f,      1,      {0x0e} },
-{ 0x0e50,      1,      {0x0e} },
-{ 0x0e51,      1,      {0x0e} },
-{ 0x0e52,      1,      {0x0e} },
-{ 0x0e53,      1,      {0x0e} },
-{ 0x0e54,      1,      {0x0e} },
-{ 0x0e55,      1,      {0x0e} },
-{ 0x0e56,      1,      {0x0e} },
-{ 0x0e57,      1,      {0x0e} },
-{ 0x0e58,      1,      {0x0e} },
-{ 0x0e59,      1,      {0x0e} },
-{ 0x0e5a,      1,      {0x0e} },
-{ 0x0e5b,      1,      {0x0e} },
-{ 0x1100,      16,     {0x12, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x47, 0x05, 0x10, 0x27, 0x01, 0x00, 0x01, 0x01} },
-{ 0x1110,      16,     {0x00, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x03, 0xa0, 0x00, 0x09, 0x04, 0x00, 0x00, 0x04} },
-{ 0x1120,      16,     {0xff, 0x00, 0x00, 0x04, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x05} },
-{ 0x1130,      16,     {0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x26, 0x03, 0x41, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x63} },
-{ 0x1140,      16,     {0x6f, 0x00, 0x72, 0x00, 0x20, 0x00, 0x43, 0x00, 0x68, 0x00, 0x69, 0x00, 0x70, 0x00, 0x73, 0x70} },
-{ 0x1150,      16,     {0x2c, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x2e, 0x00, 0x28, 0x03, 0x46, 0x28} },
-{ 0x1160,      16,     {0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x65} },
-{ 0x1170,      16,     {0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x57, 0x00, 0x6f, 0x00, 0x72, 0x6f} },
-{ 0x1180,      16,     {0x6b, 0x00, 0x73, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x66} },
-{ 0x1190,      16,     {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x6f} },
-{ 0x11a0,      16,     {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x67} },
-{ 0x11b0,      16,     {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x61} },
-{ 0x11c0,      16,     {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x6e} },
-{ 0x11d0,      2,      {0x00, 0xd0} },
+{ 0x0a09,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xbe} },
+{ 0x0a19,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0x74, 0x89} },
+{ 0x0a29,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x0d, 0x94, 0x90, 0x7f} },
+{ 0x0a39,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x7f, 0x05, 0x7e, 0x00} },
+{ 0x0a49,      16,     {0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02, 0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05} },
+{ 0x0a59,      16,     {0x7e, 0x00, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00} },
+{ 0x0a69,      16,     {0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x0d} },
+{ 0x0a79,      16,     {0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x22} },
+{ 0x0a89,      16,     {0x75, 0x32, 0x01, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x01, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x0e} },
+{ 0x0a99,      16,     {0x7d, 0x00, 0x7c, 0x01, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12} },
+{ 0x0aa9,      16,     {0x0d, 0xd7, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x02, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x80, 0x7d} },
+{ 0x0ab9,      16,     {0x00, 0x7c, 0x80, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x0d} },
+{ 0x0ac9,      16,     {0xd7, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x03, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x20, 0x7d, 0x40} },
+{ 0x0ad9,      16,     {0x7c, 0x5b, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x0d, 0xd7} },
+{ 0x0ae9,      14,     {0xe5, 0x32, 0x60, 0x05, 0xe4, 0xff, 0x12, 0x0d, 0xd7, 0xe5, 0x32, 0x24, 0xff, 0x22} },
+{ 0x0af7,      8,      {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x10, 0xd3, 0x22} },
+{ 0x0aff,      1,      {0x32} },
+{ 0x0b00,      16,     {0x02, 0x0d, 0x64, 0x00, 0x02, 0x0d, 0xab, 0x00, 0x02, 0x0d, 0x2f, 0x00, 0x02, 0x0d, 0x7c, 0x00} },
+{ 0x0b10,      16,     {0x02, 0x0d, 0xc1, 0x00, 0x02, 0x0a, 0xff, 0x00, 0x02, 0x0e, 0x4c, 0x00, 0x02, 0x0e, 0x4d, 0x00} },
+{ 0x0b20,      16,     {0x02, 0x0e, 0x4e, 0x00, 0x02, 0x0e, 0x4f, 0x00, 0x02, 0x0e, 0x50, 0x00, 0x02, 0x0e, 0x51, 0x00} },
+{ 0x0b30,      16,     {0x02, 0x0e, 0x52, 0x00, 0x02, 0x0e, 0x53, 0x00, 0x02, 0x0e, 0x54, 0x00, 0x02, 0x0e, 0x55, 0x00} },
+{ 0x0b40,      16,     {0x02, 0x0e, 0x56, 0x00, 0x02, 0x0e, 0x57, 0x00, 0x02, 0x0e, 0x58, 0x00, 0x02, 0x0e, 0x59, 0x00} },
+{ 0x0b50,      8,      {0x02, 0x0e, 0x5a, 0x00, 0x02, 0x0e, 0x5b, 0x00} },
+{ 0x0b58,      16,     {0xe4, 0xfe, 0x75, 0x2a, 0xff, 0x75, 0x2b, 0x11, 0x75, 0x2c, 0x12, 0xab, 0x2a, 0xaa, 0x2b, 0xa9} },
+{ 0x0b68,      16,     {0x2c, 0x90, 0x00, 0x01, 0x12, 0x08, 0x22, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0xb5} },
+{ 0x0b78,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x08, 0x71, 0x85, 0xf0, 0x28, 0xf5, 0x29, 0x62, 0x28} },
+{ 0x0b88,      16,     {0xe5, 0x28, 0x62, 0x29, 0xe5, 0x29, 0x62, 0x28, 0x29, 0xfd, 0xe5, 0x28, 0x3a, 0xa9, 0x05, 0x75} },
+{ 0x0b98,      14,     {0x2a, 0xff, 0xf5, 0x2b, 0x89, 0x2c, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x0ba6,      1,      {0x22} },
+{ 0x0ba7,      16,     {0xab, 0x07, 0xaa, 0x06, 0xac, 0x05, 0xe4, 0xfd, 0xe5, 0x11, 0x60, 0x11, 0xea, 0xff, 0xae, 0x05} },
+{ 0x0bb7,      16,     {0x0d, 0xee, 0x24, 0x10, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xef, 0xf0, 0xeb, 0xae, 0x05} },
+{ 0x0bc7,      16,     {0x0d, 0x74, 0x10, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xeb, 0xf0, 0xaf, 0x05, 0x0d} },
+{ 0x0bd7,      16,     {0x74, 0x10, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xec, 0xf0, 0xaf, 0x0f, 0x7a, 0x0f} },
+{ 0x0be7,      13,     {0x7b, 0x10, 0x12, 0x0d, 0x10, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x22} },
+{ 0x0bf4,      16,     {0x8e, 0x32, 0x8f, 0x33, 0x8d, 0x34, 0x8a, 0x35, 0x8b, 0x36, 0xe4, 0xfd, 0xf5, 0x37, 0xe5, 0x11} },
+{ 0x0c04,      16,     {0x60, 0x12, 0xe5, 0x32, 0xff, 0xae, 0x05, 0x0d, 0xee, 0x24, 0x13, 0xf5, 0x82, 0xe4, 0x34, 0x0f} },
+{ 0x0c14,      16,     {0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x33, 0xae, 0x05, 0x0d, 0x74, 0x13, 0x2e, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x0c24,      16,     {0x0f, 0xf5, 0x83, 0xe5, 0x33, 0xf0, 0xaf, 0x0f, 0x7a, 0x0f, 0x7b, 0x13, 0x12, 0x0d, 0x10, 0xaf} },
+{ 0x0c34,      11,     {0x0f, 0xad, 0x34, 0xab, 0x36, 0xaa, 0x35, 0x12, 0x0c, 0xf1, 0x22} },
+{ 0x0c3f,      16,     {0x8e, 0x32, 0x8f, 0x33, 0x8d, 0x34, 0x8a, 0x35, 0x8b, 0x36, 0xe4, 0xf5, 0x37, 0xe5, 0x37, 0xc3} },
+{ 0x0c4f,      16,     {0x95, 0x34, 0x50, 0x20, 0x05, 0x33, 0xe5, 0x33, 0xae, 0x32, 0x70, 0x02, 0x05, 0x32, 0x14, 0xff} },
+{ 0x0c5f,      16,     {0xe5, 0x36, 0x25, 0x37, 0xf5, 0x82, 0xe4, 0x35, 0x35, 0xf5, 0x83, 0xe0, 0xfd, 0x12, 0x0b, 0xa7} },
+{ 0x0c6f,      5,      {0x05, 0x37, 0x80, 0xd9, 0x22} },
+{ 0x0c74,      16,     {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x25, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xe0} },
+{ 0x0c84,      16,     {0x44, 0x01, 0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x8a} },
+{ 0x0c94,      13,     {0x0a, 0x89, 0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x03, 0xd3, 0x22, 0xc3, 0x22} },
+{ 0x0ca1,      16,     {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x23, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xe0} },
+{ 0x0cb1,      16,     {0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x8a, 0x0a, 0x89} },
+{ 0x0cc1,      11,     {0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x01, 0xd3, 0x22, 0xc3, 0x22} },
+{ 0x0ccc,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x06, 0x04, 0xe0, 0x44} },
+{ 0x0cdc,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xf0} },
+{ 0x0cec,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x22} },
+{ 0x0cf1,      16,     {0x12, 0x0c, 0x74, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0xf3} },
+{ 0x0d01,      15,     {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x22} },
+{ 0x0d10,      16,     {0x12, 0x0c, 0xa1, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0xf3} },
+{ 0x0d20,      15,     {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x22} },
+{ 0x0d2f,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f} },
+{ 0x0d3f,      11,     {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d4a,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0x12, 0xe0, 0x44, 0x01, 0xf0, 0x7f, 0x14, 0x7e, 0x00, 0x12} },
+{ 0x0d5a,      10,     {0x0d, 0x94, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfe, 0xf0, 0x22} },
+{ 0x0d64,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x01} },
+{ 0x0d74,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d7c,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x03, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x08} },
+{ 0x0d8c,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d94,      16,     {0x8e, 0x38, 0x8f, 0x39, 0xe5, 0x39, 0x15, 0x39, 0xae, 0x38, 0x70, 0x02, 0x15, 0x38, 0x4e, 0x60} },
+{ 0x0da4,      7,      {0x05, 0x12, 0x0e, 0x00, 0x80, 0xee, 0x22} },
+{ 0x0dab,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0xd0} },
+{ 0x0dbb,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dc1,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0xd0} },
+{ 0x0dd1,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dd7,      16,     {0xae, 0x07, 0x7f, 0x21, 0x7d, 0x01, 0x74, 0x00, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xab, 0x82} },
+{ 0x0de7,      5,      {0xfa, 0x12, 0x0d, 0x10, 0x22} },
+{ 0x0dec,      16,     {0x50, 0x0f, 0x00, 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0xc6} },
+{ 0x0dfc,      3,      {0xa1, 0x86, 0x8e} },
+{ 0x0dff,      1,      {0x00} },
+{ 0x0e00,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0xf9} },
+{ 0x0e10,      1,      {0x22} },
+{ 0x0e11,      14,     {0x90, 0x7f, 0x00, 0xe5, 0x10, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x22} },
+{ 0x0e1f,      14,     {0x90, 0x7f, 0x00, 0xe5, 0x0e, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x22} },
+{ 0x0e2d,      8,      {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0e, 0xd3, 0x22} },
+{ 0x0e35,      8,      {0xe4, 0xf5, 0x0d, 0xd2, 0xe9, 0xd2, 0xaf, 0x22} },
+{ 0x0e3d,      3,      {0xd2, 0x00, 0x22} },
+{ 0x0e40,      2,      {0xd3, 0x22} },
+{ 0x0e42,      2,      {0xd3, 0x22} },
+{ 0x0e44,      2,      {0xd3, 0x22} },
+{ 0x0e46,      2,      {0xd3, 0x22} },
+{ 0x0e48,      2,      {0xd3, 0x22} },
+{ 0x0e4a,      2,      {0xd3, 0x22} },
+{ 0x0e4c,      1,      {0x32} },
+{ 0x0e4d,      1,      {0x32} },
+{ 0x0e4e,      1,      {0x32} },
+{ 0x0e4f,      1,      {0x32} },
+{ 0x0e50,      1,      {0x32} },
+{ 0x0e51,      1,      {0x32} },
+{ 0x0e52,      1,      {0x32} },
+{ 0x0e53,      1,      {0x32} },
+{ 0x0e54,      1,      {0x32} },
+{ 0x0e55,      1,      {0x32} },
+{ 0x0e56,      1,      {0x32} },
+{ 0x0e57,      1,      {0x32} },
+{ 0x0e58,      1,      {0x32} },
+{ 0x0e59,      1,      {0x32} },
+{ 0x0e5a,      1,      {0x32} },
+{ 0x0e5b,      1,      {0x32} },
+{ 0x1100,      16,     {0x12, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x47, 0x05, 0x10, 0x27, 0x01, 0x00, 0x01, 0x02} },
+{ 0x1110,      16,     {0x00, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x03, 0xa0, 0x00, 0x09, 0x04, 0x00, 0x00, 0x02} },
+{ 0x1120,      16,     {0xff, 0x00, 0x00, 0x04, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x40} },
+{ 0x1130,      16,     {0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x26, 0x03, 0x41, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00} },
+{ 0x1140,      16,     {0x6f, 0x00, 0x72, 0x00, 0x20, 0x00, 0x43, 0x00, 0x68, 0x00, 0x69, 0x00, 0x70, 0x00, 0x73, 0x00} },
+{ 0x1150,      16,     {0x2c, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x2e, 0x00, 0x28, 0x03, 0x46, 0x00} },
+{ 0x1160,      16,     {0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x00} },
+{ 0x1170,      16,     {0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x57, 0x00, 0x6f, 0x00, 0x72, 0x00} },
+{ 0x1180,      16,     {0x6b, 0x00, 0x73, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x00} },
+{ 0x1190,      16,     {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00} },
+{ 0x11a0,      16,     {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x03} },
+{ 0x11b0,      16,     {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x00} },
+{ 0x11c0,      16,     {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00} },
+{ 0x11d0,      2,      {0x00, 0x00} },
 { 0xffff,      0,      {0x00} }
 };
+#endif
index e0bdc13379393034059efbb4bdefb966a3d2d094..78ebb20abd99bf075cf7cdb1aae0e2d580fbacc9 100644 (file)
@@ -273,6 +273,15 @@ static void check_partition(struct gendisk *hd, kdev_t dev, int first_part_minor
  * done
  */
 
+void register_disk(struct gendisk *gdev, kdev_t dev, unsigned minors,
+       struct block_device_operations *ops, long size)
+{
+       unsigned first = (unsigned)dev;
+       if (!gdev)
+               return;
+       grok_partitions(gdev, MINOR(dev)>>gdev->minor_shift, minors, size);
+}
+
 void grok_partitions(struct gendisk *dev, int drive, unsigned minors, long size)
 {
        int i;
index 3c39c1d7cc9704325f490fd6d9fae0fcae8f30c4..3a1f00e3d0a2a085e9d76bc7fad5158e8fe359ee 100644 (file)
@@ -5,6 +5,8 @@
  *
  */
 
+#include <linux/config.h>
+
 #ifdef CONFIG_BLK_DEV_IDE
 
 #include <asm/irq.h>
index 0fa4a10a2a62348b0fe4964d5ce368d55315d2ef..ffdad2180e5375049128e0d23beac5bdbccd7a75 100644 (file)
@@ -4,6 +4,7 @@
  * (C) 1999 Nicolas Pitre <nico@cam.org>
  */
 
+#include <linux/config.h>
 
 #if defined(CONFIG_SA1100_EMPEG) || \
     defined(CONFIG_SA1100_VICTOR) || \
index 01f6a18714216743e95ec60d6745e730d9ddd9c6..ce9cc1b74547bbb8a36981119ae8d8055bf93d48 100644 (file)
@@ -68,8 +68,16 @@ enum fixed_addresses {
        __end_of_fixed_addresses
 };
 
-extern void set_fixmap (enum fixed_addresses idx, unsigned long phys);
+extern void __set_fixmap (enum fixed_addresses idx,
+                                       unsigned long phys, pgprot_t flags);
 
+#define set_fixmap(idx, phys) \
+               __set_fixmap(idx, phys, PAGE_KERNEL)
+/*
+ * Some hardware wants to get fixmapped without caching.
+ */
+#define set_fixmap_nocache(idx, phys) \
+               __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)
 /*
  * used by vmalloc.c.
  *
index 3cdfac12fa09ca7e4da9ea9817b82c20e677485b..4c016e8a7f405b13c99eaf9199f17b88372fabb7 100644 (file)
@@ -184,6 +184,7 @@ extern inline void set_pgdir(unsigned long address, pgd_t entry)
  *
  *  - flush_tlb() flushes the current mm struct TLBs
  *  - flush_tlb_all() flushes all processes TLBs
+ *  - flush_tlb_all_kernel() flushes all processes TLBs, including special TLBs
  *  - flush_tlb_mm(mm) flushes the specified mm context TLB's
  *  - flush_tlb_page(vma, vmaddr) flushes one page
  *  - flush_tlb_range(mm, start, end) flushes a range of pages
@@ -196,6 +197,7 @@ extern inline void set_pgdir(unsigned long address, pgd_t entry)
 
 #define flush_tlb() __flush_tlb()
 #define flush_tlb_all() __flush_tlb()
+#define flush_tlb_all_kernel() __flush_tlb_global()
 #define local_flush_tlb() __flush_tlb()
 
 static inline void flush_tlb_mm(struct mm_struct *mm)
@@ -231,6 +233,7 @@ static inline void flush_tlb_range(struct mm_struct *mm,
        __flush_tlb()
 
 extern void flush_tlb_all(void);
+extern void flush_tlb_all_kernel(void);
 extern void flush_tlb_current_task(void);
 extern void flush_tlb_mm(struct mm_struct *);
 extern void flush_tlb_page(struct vm_area_struct *, unsigned long);
index 336c27c67b8c957766e4b835c46dd4a95a396dc1..7099e5b11e4ce7f69bf1be54eb69da9d87e686a9 100644 (file)
@@ -30,6 +30,23 @@ extern pgd_t swapper_pg_dir[1024];
 #define __flush_tlb() \
 do { unsigned long tmpreg; __asm__ __volatile__("movl %%cr3,%0\n\tmovl %0,%%cr3":"=r" (tmpreg) : :"memory"); } while (0)
 
+/*
+ * Global pages have to be flushed a bit differently. Not a real
+ * performance problem because this does not happen often.
+ */
+#define __flush_tlb_global()                                           \
+    do { __asm__ __volatile__( "                                       \
+       movl %%cr4,%%eax;                                               \
+       movl %%eax,%%ecx;                                               \
+       andl $0xffffff7f,%%eax; # turn off PGE (CR4[7]) in EAX \n       \
+       movl %%eax,%%cr4;                                               \
+       movl %%cr3,%%ebx;                                               \
+       movl %%ebx,%%cr3;                                               \
+       movl %%ecx,%%cr4;                                               \
+       " : : : "cc", "eax", "ebx", "ecx", "memory"                     \
+    );                                                                 \
+} while (0)
+
 #ifndef CONFIG_X86_INVLPG
 #define __flush_tlb_one(addr) __flush_tlb()
 #else
@@ -117,6 +134,7 @@ extern unsigned long empty_zero_page[1024];
 #define PAGE_COPY      __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
 #define PAGE_READONLY  __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
 #define PAGE_KERNEL    __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
+#define PAGE_KERNEL_NOCACHE    __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_PCD | _PAGE_ACCESSED)
 #define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_DIRTY | _PAGE_ACCESSED)
 
 /*
index b0434b172d3b5283f42678f119d6723ccb87616e..5529f32702cd94017bb0593bf0faeb8cb4594f43 100644 (file)
@@ -1,10 +1,6 @@
 #ifndef __ARCH_I386_POSIX_TYPES_H
 #define __ARCH_I386_POSIX_TYPES_H
 
-#if defined(__KERNEL__)
-#include <linux/config.h>
-#endif /* __KERNEL__ */
-
 /*
  * This file is generally used by user-level software, so you need to
  * be a little careful about namespace pollution etc.  Also, we cannot
index 0c3fd8d9e6fbd0e9534e23edd83a7d1a4069efe8..c96ef3283792683c0091df60c515d4ce986d2441 100644 (file)
@@ -356,6 +356,8 @@ enum
        ACPI_GPE_LEVEL,
        ACPI_EVENT,
        ACPI_P_BLK,
+       ACPI_ENTER_LVL2_LAT,
+       ACPI_ENTER_LVL3_LAT,
        ACPI_P_LVL2_LAT,
        ACPI_P_LVL3_LAT,
        ACPI_S0_SLP_TYP,
index 69eb0fd47834946ec714298118689dc494a9f59a..e8b4c0b9b3f3f4585523a069cbef1d6afdf3ecb0 100644 (file)
@@ -105,6 +105,7 @@ extern struct sec_size * blk_sec[MAX_BLKDEV];
 extern struct blk_dev_struct blk_dev[MAX_BLKDEV];
 extern wait_queue_head_t wait_for_request;
 extern void grok_partitions(struct gendisk *dev, int drive, unsigned minors, long size);
+extern void register_disk(struct gendisk *dev, kdev_t first, unsigned minors, struct block_device_operations *ops, long size);
 extern void unplug_device(void * data);
 extern void make_request(int major,int rw, struct buffer_head * bh);
 
index 768e815c639b74044f95c02c5101ffa4b557aef9..9aff2f0af0327fc2b23102511e4ca196ce29a63a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Revision: 2.6 $$Date: 1998/08/10 16:57:01 $
+/* $Revision: 3.0 $$Date: 1998/11/02 14:20:59 $
  * linux/include/linux/cyclades.h
  *
  * This file was initially written by
@@ -7,6 +7,9 @@
  *
  * This file contains the general definitions for the cyclades.c driver
  *$Log: cyclades.h,v $
+ *Revision 3.0  1998/11/02 14:20:59  ivan
+ *added nports field on cyclades_card structure;
+ *
  *Revision 2.5  1998/08/03 16:57:01  ivan
  *added cyclades_idle_stats structure;
  * 
@@ -502,6 +505,7 @@ struct cyclades_card {
     int irq;
     int num_chips;     /* 0 if card absent, -1 if Z/PCI, else Y */
     int first_line;    /* minor number of first channel on card */
+    int nports;                /* Number of ports in the card */
     int bus_index;     /* address shift - 0 for ISA, 1 for PCI */
     int        intr_enabled;   /* FW Interrupt flag - 0 disabled, 1 enabled */
 #ifdef __KERNEL__
index 20373545cf15adc1eb3311d11c333006f907a901..8036605034e49fae9cb3e050f40f06a2bf923239 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * cisreg.h 1.14 1999/10/25 20:23:17
+ * cisreg.h 1.16 2000/01/16 19:19:14
  *
  * The contents of this file are subject to the Mozilla Public License
  * Version 1.1 (the "License"); you may not use this file except in
@@ -30,7 +30,9 @@
 #ifndef _LINUX_CISREG_H
 #define _LINUX_CISREG_H
 
-/* Offsets from ConfigBase for CIS registers */
+/*
+ * Offsets from ConfigBase for CIS registers
+ */
 #define CISREG_COR             0x00
 #define CISREG_CCSR            0x02
 #define CISREG_PRR             0x04
 #define FEMR_PWM_ENA           0x0040
 #define FEMR_WKUP_MASK         0x4000
 
+/*
+ * Indirect Addressing Registers for Zoomed Video: these are addresses
+ * in common memory space
+ */
+#define CISREG_ICTRL0          0x02    /* control registers */
+#define CISREG_ICTRL1          0x03
+#define CISREG_IADDR0          0x04    /* address registers */
+#define CISREG_IADDR1          0x05
+#define CISREG_IADDR2          0x06
+#define CISREG_IADDR3          0x07
+#define CISREG_IDATA0          0x08    /* data registers */
+#define CISREG_IDATA1          0x09
+
+#define ICTRL0_COMMON          0x01
+#define ICTRL0_AUTOINC         0x02
+#define ICTRL0_BYTEGRAN                0x04
+
 #endif /* _LINUX_CISREG_H */
index 00412858e8b32b23520df8e57a1d97e6991f4c1f..d53e446461a73d5b62fcb8042beaab3398af587e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * cistpl.h 1.31 1999/10/25 20:23:17
+ * cistpl.h 1.32 2000/01/11 19:06:50
  *
  * The contents of this file are subject to the Mozilla Public License
  * Version 1.1 (the "License"); you may not use this file except in
 #define CISTPL_NULL            0x00
 #define CISTPL_DEVICE          0x01
 #define CISTPL_LONGLINK_CB     0x02
+#define CISTPL_INDIRECT                0x03
 #define CISTPL_CONFIG_CB       0x04
 #define CISTPL_CFTABLE_ENTRY_CB        0x05
 #define CISTPL_LONGLINK_MFC    0x06
 #define CISTPL_BAR             0x07
+#define CISTPL_PWR_MGMNT       0x08
+#define CISTPL_EXTDEVICE       0x09
 #define CISTPL_CHECKSUM                0x10
 #define CISTPL_LONGLINK_A      0x11
 #define CISTPL_LONGLINK_C      0x12
@@ -67,6 +70,7 @@
 #define CISTPL_BATTERY         0x45
 /* Layer 3 tuples */
 #define CISTPL_ORG             0x46
+#define CISTPL_SPCL            0x90
 
 typedef struct cistpl_longlink_t {
     u_int      addr;
index 63f56430e928490049fa77ba2f56489484e0bc6b..92feb63226d123f904fe58f6fa10765977f97a89 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * cs_types.h 1.16 1999/10/25 20:23:17
+ * cs_types.h 1.17 2000/01/18 01:14:36
  *
  * The contents of this file are subject to the Mozilla Public License
  * Version 1.1 (the "License"); you may not use this file except in
 #ifndef _LINUX_CS_TYPES_H
 #define _LINUX_CS_TYPES_H
 
+#ifdef __KERNEL__
 #include <linux/types.h>
+#else
+#include <sys/types.h>
+#endif
 
 typedef u_short        socket_t;
 typedef u_short        ioaddr_t;
index 2a3cd252385abf50f6e95f90481f937a020f8561..4606b40b374960112bef9e635e4e03a14ce58c52 100644 (file)
@@ -1,4 +1,4 @@
-/* version.h 1.76 1999/10/26 18:55:56 (David Hinds) */
+/* version.h 1.81 1999/12/23 21:37:32 (David Hinds) */
 
-#define CS_RELEASE "3.1.4"
-#define CS_RELEASE_CODE 0x3104
+#define CS_RELEASE "3.1.9"
+#define CS_RELEASE_CODE 0x3109
index cb4cfbbccd3c28d4b89a6515fed2a867c98165f3..cea79407748aa75804214e2c4b219c3738269075 100644 (file)
@@ -263,6 +263,7 @@ EXPORT_SYMBOL(blkdev_put);
 EXPORT_SYMBOL(ioctl_by_bdev);
 EXPORT_SYMBOL(gendisk_head);
 EXPORT_SYMBOL(grok_partitions);
+EXPORT_SYMBOL(register_disk);
 EXPORT_SYMBOL(unplug_device);
 EXPORT_SYMBOL(make_request);
 EXPORT_SYMBOL(tq_disk);
index e7472128f5b485d11f961ce02e389d79cbe032ac..fde0159ff2307cac52217b6de51afb8b03a96d6a 100644 (file)
@@ -4,7 +4,6 @@
  *  Copyright (C) 1991, 1992  Linus Torvalds
  */
 
-#include <linux/config.h>
 #include <linux/mm.h>
 #include <linux/utsname.h>
 #include <linux/mman.h>
index 5d42a49222c397f0b42c5b1cd529ed56e94c0a54..4244c2d1622f2f440c6b2cd7e9ee7c2904f3071a 100644 (file)
@@ -125,10 +125,10 @@ static void flush_all_zero_pkmaps(void)
                page = pte_page(pte);
                page->virtual = 0;
        }
-       flush_tlb_all();
+       flush_tlb_all_kernel();
 }
 
-static unsigned long map_new_virtual(struct page *page)
+static inline unsigned long map_new_virtual(struct page *page)
 {
        unsigned long vaddr;
        int count;
@@ -170,12 +170,6 @@ start:
        }
        vaddr = PKMAP_ADDR(last_pkmap_nr);
        pkmap_page_table[last_pkmap_nr] = mk_pte(page, kmap_prot);
-       /*
-        * Subtle! For some reason if we dont do this TLB flush then
-        * we get data corruption and weird behavior in dbench runs.
-        * But invlpg this should not be necessery ... Any ideas?
-        */
-       __flush_tlb_one(vaddr);
 
        pkmap_count[last_pkmap_nr] = 1;
        page->virtual = vaddr;